Удалить файл произвольного доступа к данным в Java

Я создаю телефонную книгу, в которой хранится контактная информация и массив телефонов каждого контакта. Я использую randomaccessfile, функция mi для хранения данных:

 public void writeRand(String name, People other, int tam) {
        RandomAccessFile file;
        try {
            file= new RandomAccessFile(name, "rw");
            file.seek(file.length());
            file.writeInt(other.getCount());
            file.writeUTF(other.getName());
            file.writeUTF(other.getAddress());
            file.writeUTF(other.getMail());
            archivo.writeUTF(other.getDate());
            for (int i = 0; i < tam; i++) {
                file.writeUTF(other.getPhones()[i]);
                file.writeBoolean(other.getPT()[i]);
                file.writeBoolean(other.getMF()[i]);
            }
            file.writeUTF(other.getNotes());
            file.writeUTF(other.getState());
            file.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(file.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(file.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

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

Реальный вопрос в том, как создать функцию, которая позволит мне удалить весь контакт?

1 ответ

Решение

Вы должны разделять каждый контакт в строке. Вы можете использовать NIO, чтобы получить линию (которая была бы контактом), а затем удалить контакт, удалить линию. Есть два способа получить содержимое вашего файла:

String filecontents = new String( java.nio.file.Files.readAllBytes(Paths.get(new File(name).toURI)));
List<String> filecontents = java.nio.file.Files.readAllLines(Path.get(new File(name).toURI));

Используя это, у вас есть два варианта.

    String filecontents = new String( java.nio.file.Files.readAllBytes(Paths.get(new File(name).toURI())));
    String contactinfostart = String.valueOf(other.getCount()); //First value in file
    String contactinfoend = other.getState();
    int contactstartindex = filecontents.indexOf(contactinfostart);
    int contactendindex = filecontents.indexOf(contactinfoend + other.getState().length());
    String prefix = filecontents.substring(contactstartindex);
    String ending = filecontents.substring(contactendindex);
    String newfilecontents = prefix + ending;
    rw.seek(0);
    rw.writeUTF(newfilecontents);

Или используя параметр списка строк:

List<String> filecontentslist = java.nio.file.Files.readAllLines(Paths.get(new File(name).toURI()));
    String filecontents;
    for(int i = 0; i < filecontentslist.size(); i++){
        filecontents = filecontents + filecontentslist.get(i);
    }
//Here below is similar to first answer
    String contactinfostart = String.valueOf(other.getCount()); //First value in file
    String contactinfoend = other.getState();
    int contactstartindex = filecontents.indexOf(contactinfostart);
    int contactendindex = filecontents.indexOf(contactinfoend + other.getState().length());
    String prefix = filecontents.substring(contactstartindex);
    String ending = filecontents.substring(contactendindex);
    String newfilecontents = prefix + ending;
    rw.seek(0);
    rw.writeUTF(newfilecontents);

Либо должно работать. Примечание: оба записывают новую строку в файл. Вы можете удалить методы rw.seek и rw.writeUTF в конце моего кода.

Другие вопросы по тегам