2009-11-29 167 views
1

我需要从文件中删除某些行,该文件是我从文件读入我的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); 
    } 
} 

我接触类是:我猜它会删除它从ArrayList中

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; 
    } 
} 

,但我不知道程序如何知道要从文件中删除什么。

谢谢。

+1

第4行末尾有一个错位的分号。 – Svante 2009-11-29 16:20:28

+0

真的吗?当它在那里,它不会在它被移除时运作良好,所以去图! – addiosamigo 2009-11-29 18:00:41

回答

1

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

1

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

+0

我该如何去做这件事?,我已经在追加模式下使用该文件写入文件 – addiosamigo 2009-11-29 14:24:09

+1

那么你可以喜欢java.io.RandomAccessFile,并追加记录到最后和“删除”联系人中间通过写空格给名字或姓氏等。但是在作业分配中,只要重写任何改变的文件(除非重点是学习随机文件操作)。 – 2009-11-29 15:44:52

+0

这个任务只是为了创建一个地址簿gui,显示,添加,删除和保存,哦,搜索(这是我想要的高级方式,甚至可以考虑) – addiosamigo 2009-11-29 17:41:57

1

你可以使用random access file,但是对于这个任务来说它看起来像是一个过度的杀手。 最好的办法是让remove函数将整个文件写回磁盘。

+0

我会怎么做呢? – addiosamigo 2009-11-29 19:23:46

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; 
} 

}

+0

小心,我们不想为他做@ adiosamigo的功课! ;-) – 2009-11-29 15:48:06

+0

你做了什么?一样的? – addiosamigo 2009-11-29 17:54:27

+0

@jim ferrans,相信我,我在这项任务上做了很多工作! – addiosamigo 2009-11-29 17:56:26

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(); 

你首先要实现你的ContactSerializable接口。

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

+0

看起来很酷,但是这是做什么? – addiosamigo 2009-11-29 17:42:46

+0

由此您不必编写一个单独的函数来存储/恢复您的列表中的联系人到文件。 – 2009-11-30 09:03:06