如何使用Java中的新值覆盖CSV文件

时间:2017-09-27 00:57:38

标签: java file csv arraylist

我正在尝试在我的代码中编辑播放器,然后更新我创建的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;
}

}

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助, 我相信您使用的是fw.write而不是fw.append,而是使用"\n"在最后添加新的字符{{1}}。