Использование BufferedWriter в бесконечном цикле

#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