2009-11-29 259 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