Java编写者只写了arraylist的最后一个元素

时间:2016-01-29 19:46:05

标签: java arraylist

这是我的问题,我有一个对象的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()); 
    }
}

1 个答案:

答案 0 :(得分:2)

您正在使用静态方法,因此所有内容都与contacts类相关,而与对象contact无关。

因此将数据访问器方法更改为非静态。正确填充对象然后在for循环中填充,而不是使用contacts使用contact