如何使一个CSV文件接收多个用户

问题描述 投票:0回答:1

我已经根据我输入到文本字段中的数据成功创建了一个csv文件,但是问题在于它只会容纳一个用户。我知道问题是我没有将我的write方法设置为静态,但是我想不出一种方法来将存储在变量中的数据传输到csv文件中而不将其设置为非静态。

public class newUserController {

        //private ResourceBundle resources;
        public Button continues;
        public Button save;

        public TextField tf_username;
        public PasswordField pf_password;
        public TextField tf_name;
        public ComboBox<?> dd_selectGender;
        public TextField tf_email;
        public TextField tf_age;
        public TextField tf_height;
        public ComboBox<?> dd_measurment;


        public void savePressed(ActionEvent event) throws IOException{
            String username = tf_username.getText();
            String password = pf_password.getText();
            String name = tf_name.getText();
            String gender = (String) dd_selectGender.getValue();
            String email = tf_email.getText();
            String age =tf_age.getText();
            String height=tf_height.getText();
            String measurment = (String) dd_measurment.getValue();
            CSVBuilder csv = new CSVBuilder(username,password,name,gender,email,age,height,measurment);


        }


        public void continuePressed(ActionEvent event) throws IOException{
            Parent menu = FXMLLoader.load(getClass().getResource("Menu Overview.fxml"));
            Scene menuScene = new Scene(menu);

            Stage window =(Stage)((Node)event.getSource()).getScene().getWindow();

            window.setScene(menuScene);
            window.show();
        }



}
public class CSVBuilder {

     String username;
     String password;
     String name;
     String gender;
     String email;
     String age;
     String height;
     String measurement;

    CSVBuilder(String user, String pass, String nam, String gen, String e_mail, String ag, String hei, String measur){
        username = user;
        password = pass;
        name = nam;
        gender = gen;
        email = e_mail;
        age = ag;
        height = hei;
        measurement = measur;
        String filePath = "C:\\Users\\vargh\\eclipse-workspace\\Java\\FitLog.csv";
        writeCsv(filePath);
    }

    //technically should be static
    public void writeCsv(String filePath) {
        //create demo Users
        List<User> users= new ArrayList<User>();
        User user = new User(username,password,name,gender,email,age,height,measurement);
        users.add(user);

        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter(filePath);         

            fileWriter.append("Username, Password, Name, Gender, E-Mail, Age, Height, Measurement\n");

            for(User u: users) {
            fileWriter.append(String.valueOf(u.getUsername()));
            fileWriter.append(",");
            fileWriter.append(u.getPassword());
            fileWriter.append(",");
            fileWriter.append(u.getName());
            fileWriter.append(",");
            fileWriter.append(u.getGender());
            fileWriter.append(",");
            fileWriter.append(u.getEmail());
            fileWriter.append(",");
            fileWriter.append(u.getAge());
            fileWriter.append(",");
            fileWriter.append(u.getHeight());
            fileWriter.append(","); 
            fileWriter.append(u.getMeasurement());
            fileWriter.append("\n"); 
           }
        } catch (Exception ex) {
           ex.printStackTrace();
        } finally {
            try {
                fileWriter.flush();
                fileWriter.close();
           }catch (Exception e) {
               e.printStackTrace();
           }
        }
    }
}
public class User {
    String username;
    String password;
    String name;
    String gender;
    String email;
    String age;
    String height;
    String measurement;
    User(String user, String pass, String nam, String gen, String e_mail, String ag, String hei, String measur){
        username = user;
        password = pass;
        name = nam;
        gender = gen;
        email = e_mail;
        age = ag;
        height = hei;
        measurement = measur;
    }

    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public String getName() {
        return name;
    }
    public String getGender() {
        return gender;
    }
    public String getEmail() {
        return email;
    }
    public String getAge() {
        return age;
    }
    public String getHeight() {
        return height;
    }
    public String getMeasurement() {
        return measurement;
    }

}
java csv javafx
1个回答
0
投票

您仅添加1个用户,对吧?

        List<User> users= new ArrayList<User>();
        User user = new User(username,password,name,gender,email,age,height,measurement);
        users.add(user);

也将引起注意:

CSVBuilder csv = new CSVBuilder(username,password,name,gender,email,age,height,measurment);

建议将其重构为ListUsers

    CSVBuilder(List<User> users){
        this.users = users;
    }

然后您可以使用类似的方法来调用它:

        List<User> users= new ArrayList<>();
        User user = new User("username-1","password-1","alice","f","[email protected]","20","","");
        users.add(user);
        User user2 = new User("username-2","password-2","bob","m","[email protected]","21","","");
        users.add(user2);
        CSVBuilder csvBuilder = new CSVBuilder(users);
        csvBuilder.writeCsv("FitLog.csv");

产生输出:

Username, Password, Name, Gender, E-Mail, Age, Height, Measurement
username-1,password-1,alice,f,[email protected],20,,
username-2,password-2,bob,m,[email protected],21,,

也将建议使用https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,%20boolean),因为似乎您可能试图使用新用户/单击将其追加到文件中。默认选项不会追加,但会覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.