我已经根据我输入到文本字段中的数据成功创建了一个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;
}
}
您仅添加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);
建议将其重构为List
的Users
:
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)
,因为似乎您可能试图使用新用户/单击将其追加到文件中。默认选项不会追加,但会覆盖。