这是我的问题,我有一个对象的arraylist,我希望写一个文本文件。在大多数情况下这是有效的,但令人讨厌的是它只写了arraylist的最后一个元素。我的代码如下:
public void write() throws IOException {
try {
File file = new File("C:\\contacts.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
for(contacts contact:contactList) {
StringBuffer contactrec=new StringBuffer();
contactrec.append(contacts.getID());
contactrec.append(",");
contactrec.append(contacts.getName());
contactrec.append(",");
contactrec.append(contacts.getNotes());
bw.write(contactrec.toString());
bw.newLine();
System.out.println("Contacts have been updated");
}
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
如果arraylist的大小为3,则编写者会将arraylist的最后一个元素写入文件3次。所以如果最后一个元素是: “12,John Doe,fish”文本文件将有:
12,John Doe,fish
12,John Doe,fish
12,John Doe,fish
写在里面。我想知道如何修复以及为什么会发生这种情况,提前感谢任何帮助。
我的联系人类是这样的,并且填充了从csv文件中读取的对象:
public class contacts {
private static String ID;
private static String Name;
private static String Notes;
public contacts(String ID, String Name, String Notes){
this.ID = ID;
this.Name = Name;
this.Notes = Notes;
}
public static String getID(){
return ID;
}
public static String getName(){
return Name;
}
public static String getNotes(){
return Notes;
}
@Override
public String toString(){
return("ID = " + this.getID() + " " + "Name = " + this.getName()+ " " + "Notes = " + this.getNotes());
}
}
答案 0 :(得分:2)
您正在使用静态方法,因此所有内容都与contacts
类相关,而与对象contact
无关。
因此将数据访问器方法更改为非静态。正确填充对象然后在for循环中填充,而不是使用contacts
使用contact
。