удаление строк из файла - PullRequest
1 голос
/ 29 ноября 2009

Мне нужно удалить определенные строки из файла, файл представляет собой список контактов, которые я прочитал из файла в мой графический интерфейс. Когда я добираюсь до контакта, который хочу удалить, моя программа должна удалить контакт из файла. Я пытался сделать это, но это не работает.

Вот код, который я сейчас использую:

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

Я предполагаю, что он удаляет его из массива, но я не уверен, как программа знает, что удалить из файла.

Спасибо.

Ответы [ 5 ]

1 голос
/ 29 ноября 2009

Нет способа удалить что-либо из середины файла. Единственный способ - переписывать файл каждый раз, когда что-то нужно изменить.

1 голос
/ 29 ноября 2009

вы можете использовать файл произвольного доступа , но это похоже на избыточное уничтожение для этой задачи. лучший способ сделать это - удалить функцию записи всего файла обратно на диск.

1 голос
/ 29 ноября 2009

Изменение внутреннего списка не меняет файл. Там нет автоматического способа синхронизации двух. Вы должны сохранить массив обратно в файл, чтобы обновить его.

0 голосов
/ 29 ноября 2009

Если у вас нет определенного формата для файла, то я предлагаю вам использовать сериализацию по умолчанию и сериализовать список контактов. Вот так

//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.

0 голосов
/ 29 ноября 2009

Файлы могут быть переписаны или добавлены. В вашем случае вам придется переписать его. Есть и другие способы, но они были бы здесь излишними.

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...