Как я могу продолжить запись в файл после очистки? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь:

-принимать содержимое файла (называемого list.txt), изменять его и отправлять в временный файл (listtemp.txt).

-Очиститьlist.txt, распечатайте новое содержимое listtemp.txt в list.txt, затем очистите listtemp.txt для дальнейшего изменения list.txt

Проблема заключается в том, что у меня есть соответствующее содержимое в listtemp.txtЯ не могу взять новое содержимое и поместить его в list.txt.Я успешно очистил список, но затем не могу добавить или записать в список с помощью PrintWriter.

Я попытался очистить list.txt с помощью FileWriter, установив для параметра значение false, чтобы очистить его, затемзакрытие FileWriter и использование моего исходного PrintWriter, который я использую для печати / добавления непосредственно в мой list.txt.

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

Итак, как уже было сказано, я изменяю list.txt и успешно помещаю его в listtemp.txt.Затем я попытался создать метод swapListing (), чтобы очистить list.txt и добавить содержимое listtemp.txt.

    private void swapListing() {


        FileWriter fw = null; //This is the temporary FileWriter to clear the text file
        try {
            fw = new FileWriter(main.file, false); //Main list is cleared.
            fw.close();
            fw = null;

        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            String temp = main.getReader().readFile(main.filetemp); //I got the contents of the String from my listtemp.txt, and I checked, and the String is successfully retrieved, so this isn't the problem.
            pwriter.print(temp); // This is where I feel like file SHOULD be appended
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

Я также пытался удалить файл, но файл фактически не удаляется,и исходный контент также фактически все еще находится в файле.

    private void clearFile() {
        if (main.file.exists()) {
            main.file.delete();
            try {
                main.file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            String temp = main.getReader().readFile(main.filetemp);
            pwriter.print(temp);
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

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

1 Ответ

0 голосов
/ 11 апреля 2019

Существует понятие «безопасного сохранения», и оно даже имеет специальную поддержку со стороны операционных систем (по крайней мере, в Windows). Процедура:

  • не трогайте оригинальный файл
  • сохранить все данные в новый временный файл
  • удалить оригинальный файл
  • переместить временный файл в исходное место

Затем операционная система применит временные метки исходного файла. Перемещение файла на тот же диск - это очень быстрая операция. Необходимая модификация только в структуре файловой системы. Содержимое файла остается на том же месте на диске.

Вы не следуете этой процедуре. Для меня это звучит слишком сложно, чтобы

  • сохранить часть данных в новый временный файл
  • очистить / удалить исходный файл
  • снова прочитать весь файл в память
  • записать обратно в исходный файл
  • записать больше данных в исходный файл

Вы не указали, как и когда вы создаете pwriter. Использует ли он BufferedWriter? Когда он закрывается? Это закрыто вообще? Если нет, вы flush() это? Если да, то когда? Если нет, то это может быть частью проблемы.

...