从文件中删除行

时间:2009-11-29 14:12:59

标签: java

我需要从文件中删除某些行,该文件是我从文件读入GUI的联系人列表。当我到达要删除的联系人时,我的程序应该从文件中删除该联系人。我试过这样做,但它没有用。

以下是我目前正在使用的代码:

String temp=txtname.getText();
for (Contact Contact:contacts)
{
    if (temp.equals(Contact.getname()));
    {
        txtname.setText("");
        txtsurname.setText("");
        txtphone.setText("");
        txtmobile.setText("");
        txtaddress.setText("");
        txtpostcode.setText("");
        contacts.remove(Contact);
        contacts.remove(Contact);
        contacts.remove(Contact);
        contacts.remove(Contact);
        contacts.remove(Contact);
        contacts.remove(Contact);
    }
}

我的联系课程是:

public class Contact {

    static void add(String text) {
    }
public String name;
public String surname;
public String phone;
public String mobile;
public String address;
public String postcode;

public Contact(){}

public Contact(String name, String surname, String phone,
                   String mobile, String address, String postcode)
    {
    this.name = name;
    this.surname = surname;
    this.phone = phone;
    this.mobile = mobile;
    this.address = address; 
    this.postcode = postcode;   
}

    public String getname()
    {
        return this.name;
    }
    public String getsurname()
    {
        return this.surname;
    }
    public String getphone()
    {
        return this.phone;
    }
    public String getmobile()
    {
        return this.mobile;
    }
    public String getaddress()
    {
        return this.address;
    }
    public String getpostcode()
    {
        return this.postcode;
    }

    public void setname(String name)
    {
        this.name = name;
    }
    public void setsurname(String surname)
    {
        this.surname = surname;
    }
    public void setphone(String phone)
    {
         this.phone = phone;
    }
    public void setmobile(String mobile)
    {
         this.mobile = mobile;
    }
    public void setaddress(String address)
    {
         this.address = address;
    }
     public void setpostcode(String postcode)
    {
         this.postcode = postcode;
    }
}

我猜它会从arraylist中删除它,但我不确定该程序如何知道从文件中删除的内容。

感谢。

5 个答案:

答案 0 :(得分:1)

修改内部列表不会更改文件。没有自动同步这两者的方法。您必须将数组保存回文件以进行更新。

答案 1 :(得分:1)

无法从文件中间删除任何内容。 唯一的方法是每次更改某些内容时重写文件。

答案 2 :(得分:1)

你可以使用random access file但这对于这项任务来说似乎过度杀戮。 最好的方法是让remove函数将整个文件写回磁盘。

答案 3 :(得分:0)

文件可以重新编辑或附加到。在你的情况下,你将不得不重写它。还有其他方法,但在这里它们会有点过分。

                String temp = txtname.getText();
                for (Contact contact : contacts) {
                    if (temp.equals(contact.getname())) {
                        contacts.remove(contact);
                        break;
                    }
                }

修复了代码的许多常见问题

public class Contact {
    private String name;
    private String surname;
    private String phone;
    private String mobile;
    private String address;
    private String postcode;

public Contact(String name, String surname, String phone, String mobile, String address, String postcode) {
    this.name = name;
    this.surname = surname;
    this.phone = phone;
    this.mobile = mobile;
    this.address = address; 
    this.postcode = postcode;       
}

public String getName() {
    return this.name;
}
public String getSurname() {
    return this.surname;
}
public String getPhone() {
    return this.phone;
}
public String getMobile() {
    return this.mobile;
}
public String getAddress() {
    return this.address;
}
public String getPostcode() {
    return this.postcode;
}

}

答案 4 :(得分:0)

如果您没有该文件的特定格式,那么我建议您使用默认序列化并序列化联系人列表。像这样,

//To serialize    
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("D:/newfile.txt")));
out.writeObject(contacts);

//To deserialize
ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("d:/newFile.txt")));
contacts = (ArrayList<Contact>)in.readObject();

首先,您必须在Serializable课程中实施Contact界面。

或者,如果您需要对文件格式进行更多控制,请使用标准XML类或JSON库。