2017-09-27 77 views
0

我试图在我的代码中编辑播放器,然后更新我创建的CSV文件中的值,但我不确定如何将新值写入文件本身。我知道我想要做什么,但不知道要怎么做。我正在编辑付费金额并尝试在播放器的文件中更新它。如何用Java中的新值覆盖CSV文件

这里是我的课: 主类在这里

package squashapplication; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 

public class SquashMain { 

public static String MENU = "Options:\nA) Add player\nS) Show players\n G) Update Amount Paid\nX) Exit"; 
public static String FILE_NAME = "c:\\cis2232\\players.csv"; 

public static void main(String[] args) throws IOException { 

    Files.createDirectories(Paths.get("/cis2232")); 

    ArrayList<SquashPlayer> theList = new ArrayList(); 
    loadPlayers(theList); 
    String choice = ""; 
    do{ 
     System.out.println(MENU); 
     choice = FileUtility.getInput().nextLine().toUpperCase(); 

     switch(choice){ 
      case "A": 
       SquashPlayer player = new SquashPlayer(true); 
       theList.add(player); 


       BufferedWriter bw = null; 
       FileWriter fw = null; 

       try { 
        fw = new FileWriter(FILE_NAME, true); 
        bw = new BufferedWriter(fw); 
        bw.write(player.getCSV(true)); 
        System.out.println("Done"); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         if (bw != null) { 
          bw.close(); 
         } 

         if (fw != null) { 
          fw.close(); 
         } 

        } catch (IOException ex) { 

         ex.printStackTrace(); 

        } 

       } 

       break; 
      case "S": 
       System.out.println("Here are the players"); 
       for (SquashPlayer SquashPlayer : theList) { 
        System.out.println(SquashPlayer); 
       } 
       break; 
      case "G": 
       System.out.println("Enter ID:"); 
       int input = FileUtility.getInput().nextInt(); 
       FileUtility.getInput().nextLine(); 
       for(SquashPlayer id:theList){ 
        if(id.getId() == input){ 
         System.out.println("Enter in new amount paid:"); 
         int newAmount = FileUtility.getInput().nextInt(); 
         FileUtility.getInput().nextLine(); 
         id.setAmountPaid(newAmount); 
        } 
       } 
      case "X": 
       System.out.println("Goodbye"); 
       break; 
      default: 
       System.out.println("Invalid option"); 
       break;  
     } 


    }while (!choice.equalsIgnoreCase("x")); 

} 
public static void loadPlayers(ArrayList squash){ 
    System.out.println("Loading players from the list!"); 
    int counter = 0; 

    try{ 
     ArrayList<String> tester = (ArrayList<String>) Files.readAllLines(Paths.get(FILE_NAME)); 
     for(String current:tester){ 
      System.out.println("Loading: "+current); 
      SquashPlayer temp = new SquashPlayer(current); 
      squash.add(temp); 
      counter++; 

     } 
    }catch(IOException ex){ 
     System.out.println("Error loading players from file."); 
     System.out.println(ex.getMessage()); 
    } 
    System.out.println("Loaded players from file: "+ counter + " players"); 
} 

}

SquashPlayer类在这里

package squashapplication; 

import java.util.Scanner; 

/** 
* 

*/ 
public class SquashPlayer { 

private static int maxRegistrationId; 
private int id; 
private String name; 
private String parentName; 
private String phoneNumber; 
private String email; 
private int amountPaid; 


public SquashPlayer() { 

} 


public SquashPlayer(boolean getFromUser){ 


    System.out.println("Enter Full Name:"); 
    this.name = FileUtility.getInput().nextLine(); 

    System.out.println("Enter Parents name:"); 
    this.parentName = FileUtility.getInput().nextLine(); 

    System.out.println("Enter phone number:"); 
    this.phoneNumber = FileUtility.getInput().nextLine(); 

    System.out.println("Enter e-mail:"); 
    this.email = FileUtility.getInput().nextLine(); 

    System.out.println("Enter amount paid:"); 
    this.amountPaid = FileUtility.getInput().nextInt(); 

    FileUtility.getInput().nextLine(); 

    this.id = ++ maxRegistrationId; 

} 
public SquashPlayer(int id, String name, int amountPaid , String phoneNumber, String parentName , String email ) { 
    this.id = id; 
    this.amountPaid = amountPaid; 
    this.name = name; 
    this.parentName = parentName; 
    this.email = email; 
    this.phoneNumber = phoneNumber; 
} 
public SquashPlayer(String[] parts) { 
    this(Integer.parseInt(parts[0]), parts[1], Integer.parseInt(parts[2]), parts[3],parts[4], parts[5]); 

    if (Integer.parseInt(parts[0]) > maxRegistrationId) { 
     maxRegistrationId = Integer.parseInt(parts[0]); 
    } 
} 
public SquashPlayer(String csvValues) { 
    this(csvValues.split(",")); 
} 

public String getCSV() { 
    return id + "," + name + "," + amountPaid + "," + phoneNumber + "," + email + "," + parentName; 
} 
public String getCSV(boolean withLineFeed){ 
    if(withLineFeed){ 
     return getCSV()+System.lineSeparator(); 
    }else{ 
     return getCSV(); 
    } 
} 


public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getParentName() { 
    return parentName; 
} 

public void setParentName(String parentName) { 
    this.parentName = parentName; 
} 

public String getPhoneNumber() { 
    return phoneNumber; 
} 

public void setPhoneNumber(String phoneNumber) { 
    this.phoneNumber = phoneNumber; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public int getAmountPaid() { 
    return amountPaid; 
} 

public void setAmountPaid(int amountPaid) { 
    this.amountPaid = amountPaid; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 



@Override 
public String toString() { 
    return "ID=" +id+ ", Name=" + name + ", email=" + email + ", Phone Number=" + phoneNumber + ", Amount Paid=" + amountPaid + ", Parent's Name: "+parentName; 
} 

}

回答

0

这可能会帮助, 相反的fw.write,这我相信在你使用的东西,使用fw.append在最后加入一个新的行字符"\n"

+0

但我想覆盖我已经在文件中的条目。就像我想编辑播放器的信息一样,然后在switch语句中按下“G”后覆盖文件中的信息。 – Shuckyducky