Открытие существующего файла в Java и его закрытие. - PullRequest
4 голосов
/ 20 марта 2012

Можно ли открыть файл и добавить данные в Java и закрыть несколько раз. Например:

 //---- psuedocode
      //class variable declaration 
      FileWriter writer1 = new FileWriter(filename);

      fn1:

         writer.append(data - title);

      fn2:
       while(incomingdata == true){
         writer.append(data)
         writer.flush();
         writer.close()
        }

Проблема заключается в цикле while. Файл закрыт и не может быть открыт снова. Кто-нибудь может мне помочь в этом?

Ответы [ 4 ]

2 голосов
/ 20 марта 2012

Ответы, которые не советуют закрывать и открывать файл каждый раз, совершенно правильные.

Однако, если вам абсолютно необходимо это сделать (и мне не ясно, что вы делаете), то вы можете каждый раз создавать новый FileWriter. Передайте true в качестве второго аргумента при создании FileWriter, чтобы получить тот, который добавляется к файлу вместо его замены. Нравится

FileWriter writer1 = new FileWriter(filename, true); 
1 голос
/ 20 марта 2012

Как только поток будет закрыт, дальнейшие вызовы write () или flush () вызовут IOException. Однако закрытие ранее закрытого потока не имеет никакого эффекта.

 while(incomingdata == true){
         writer.write(data)
 }
 writer.close()

Вам не нужно каждый раз промывать. так как вызов close() сначала сбросит данные перед закрытием потока.

Обновлено для

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

Используйте это так

while(incomingdata == true){
             writer.append(data);
             writer.flush();
}
writer.close();
1 голос
/ 20 марта 2012

После того, как файл будет закрыт, вам нужно будет снова открыть его. Вызов writer.flush() должен очистить поток. Таким образом, в основном вы удалите writer.close() из цикла while. Это позволит вам закрыть файл, как только вы закончите с ним.

Таким образом, у вас есть два варианта: либо удалить writer.close() из цикла while, либо создать новый экземпляр FileWriter в начале цикла.

0 голосов
/ 20 марта 2012

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

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

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