#java #loops #filewriter #bufferedwriter
#java #циклы #filewriter #bufferedwriter
Вопрос:
Могу ли я использовать BufferedWriter (или любой класс writer, если на то пошло) для вывода новой строки в текстовый файл во время каждой итерации бесконечного цикла, пока программа не будет остановлена? Насколько я понимаю, команда BufferedWriter.close() должна быть вызвана для сохранения текста в файл, но если writer закрыт внутри цикла, программа выдаст исключение — очевидно, что если для writer установлено значение close вне цикла, оператор недоступен. Заранее спасибо за любую помощь.
Вот соответствующий код:
int count = 0;
BufferedWriter out = new BufferedWriter(new FileWriter("myTextFile.txt"));
while (true)
{
if(count == 0){
out.write(myString);
out.newLine();
System.out.println(myString);
} else {
out.append(myString);
out.newLine();
System.out.println(myString);
}
System.out.println("count = " count);
count ;
out.flush();
out.close();
}
Комментарии:
1. И вы не можете просто поместить функции закрытия вне цикла while?
2. Почему бы не указать значение, определяющее, когда следует прекратить цикл, установите это значение, когда вы хотите завершить работу программы, а затем закройте свой ресурс после цикла. Вы вынуждены иметь бесконечный цикл или не контролируете, когда программа закрывается?
3. @Austin Если writer закрыт вне бесконечного цикла, этот оператор не будет достигнут.
4. @aherbets ой, упс … совершенно не понимаю этого. 🙁
5. @Andrew_CS — Я использую бесконечный цикл, потому что программа получает текст по многоадресной рассылке каждые 90 секунд — текст, который анализируется, а затем обновляется в текстовый файл — и это должно продолжаться до тех пор, пока пользователь не остановит программу.
Ответ №1:
Вы должны использовать метод Flush и извлечь свой close в finalize()
методе.
Использование Flush позволит вам видеть результат в вашем текстовом файле, пока ваше приложение записывает в него.
Когда вы остановите свое приложение, GC вызовет метод finalize и закроет поток.
Комментарии:
1. При использовании метода flush буфер будет сброшен на диск, и вы сможете увидеть содержимое вашего файла.
Ответ №2:
Если вы просто хотите убедиться, что все данные записаны в file, flush сделает это. Close в основном предназначен для освобождения ресурса, особенно если вы явно вызываете flush
flush — сбрасывает поток.
закрыть — закрывает поток, сначала очищая его. Как только поток будет закрыт, дальнейшие вызовы write() или flush() вызовут исключение IOException. Закрытие ранее закрытого потока не имеет никакого эффекта.
Дополнительная информация: http://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html