Файлы очищаются при создании объекта - PullRequest
0 голосов
/ 27 февраля 2011

У меня раздражающая проблема, которую я не могу решить. У меня есть класс с именем DirFormMgmt, который управляет двумя файлами; directoryies.txt и format.txt. Проблема в том, что когда я запускаю экземпляр этого класса при запуске программы, он очищает все, что было в файлах перед его запуском, например, если я открываю файл format.txt, набираю ".avi" и запускаю программу текстовый файл станет пустым. Вот единственный код, который я запускаю в своем классе, чтобы изолировать проблему, и я не уверен, почему это происходит:

В начале моего класса я заявляю:

File dirFile = new File("directories.txt");
File formatFile = new File("formats.txt");
private BufferedReader dirReader;
private BufferedWriter dirWriter;
private BufferedReader formatReader;
private BufferedWriter formatWriter;

Конструктор:

public DirFormMgmt() throws IOException {
     checkFileExistence();
     initReaderWriter();
}

Два метода, вызываемых конструктором:

public void checkFileExistence() throws IOException {
     if (!dirFile.exists()) {
         dirFile.createNewFile();
     }
     if (!formatFile.exists()) {
         formatFile.createNewFile();
     }   
}

и

public void initReaderWriter() throws IOException {
     dirReader = new BufferedReader(new FileReader(dirFile));
     dirWriter = new BufferedWriter(new FileWriter(dirFile));

     formatReader = new BufferedReader(new FileReader(formatFile));
     formatWriter = new BufferedWriter(new FileWriter(formatFile));
}

Я проверил, вызывались ли методы createNewFile (), но они этого не делали, поэтому проблема должна быть в моем методе initReaderWriter (), но я не уверен, что не так, любая помощь очень ценится!

Ответы [ 2 ]

3 голосов
/ 27 февраля 2011

Используйте new FileWriter(file, true) для добавления содержимого в существующий файл. В противном случае содержимое будет перезаписано.

0 голосов
/ 27 февраля 2011

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

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

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