Как удалить элементы из ArrayList, которые хранятся во внешнем текстовом файле

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

Это arraylist, который в основном содержит текстовый файл ответов.

Это метод, который позволяет txt-файлу хранить ArrayList ответов.

public void writeAList(ArrayList<String> list, String filename)
    {
        if(list != null) {
            try (FileWriter writer = new FileWriter(filename, true)) {
                for(String item : list) {
                    writer.write(item.trim());
                    writer.write(" ");
                }       
                writer.write("\n");
            }
            catch(IOException e) {
                System.out.println("Problem writing file: " + filename +
                                   " in writeAList");
            }

        }
        else {
            System.out.println("Null list passed to writeAList.");
        }
    }

Это метод, который позволяет читать из него

public ArrayList<String> readAList(String filename)
{
    ArrayList<String> list = new ArrayList<>();
    try (BufferedReader reader =
            new BufferedReader(new FileReader(filename))) {
        String line = reader.readLine();
        while(line != null) {
            list.add(line.trim());
            line = reader.readLine();
        }
    }
    catch(IOException e) {
        System.out.println("Problem reading file: " + filename +
                           " in readAList");
    }
    return list;
}

Я назначил ArrayList, называемый так

notRecognised = help.readAList("missed.txt");

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

 public String removeResponse(ArrayList<String> words)
{
    Iterator<String> it = words.iterator();
    while(it.hasNext()) {
        String word = it.next();
        String response = notRecognised.get(word);
        if(response.equals (words)) {
            it.remove();
        }
    }

}

person user5647516    schedule 08.12.2015    source источник
comment
Вы не можете удалить элементы из текстового файла. Вы можете только писать поверх текстового файла и опускать то, что вы удаляете.   -  person CubeJockey    schedule 09.12.2015


Ответы (2)


Текстовые файлы хранят только текст. Если вы хотите отредактировать его (удалить элементы), вам нужно переписать его. Более подходящим хранилищем данных для CRUD (создание, поиск, обновление, удаление) данных будет использование базы данных, а не текстового файла.

Вы можете прочитать здесь: Доступ к базе данных JDBC

person user3437460    schedule 08.12.2015
comment
Примечания. Вы также можете использовать файл CSV для CRUD ваших данных, что будет намного проще, чем использование обычного текстового файла. - person user3437460; 09.12.2015

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

person Slava Vedenin    schedule 08.12.2015
comment
Спасибо @Viacheslav, это имеет больше смысла - person user5647516; 09.12.2015