2016-11-08 9 views
0

Так что в моей программе у меня есть BufferedWriter, который используется для создания файлов журналов того, что делает программа.BufferedWriter: пишите в файл до его закрытия

private BufferedWriter logWriter; 
logWriter = new BufferedWriter(new FileWriter(logFile)); 

В нескольких классах нескольких раз я называю метод ниже, чтобы продолжить добавление в файл журнала:

public void log(String logTXT) 
{ 
    try 
    { 
     logWriter.write(logTXT + "\n"); 
    } catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

Это все работает отлично, но одна вещь, которую он делает, это Безразлично Фактически я пишу в файл, пока не позвоню logWriter.close();.

То, что я хотел бы видеть, это строка, добавляемая к файлу сразу же после вызова метода. Есть ли в любом случае, что я могу обойти это, или мне просто придется жить с этим, учитывая, что это не проблема.

+1

Вы пробовали прочитать javadocs? https://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#flush() возможно? –

+0

@ Ryan: Я вижу, что вы получили свой ответ, но если вы хотите понять, почему это случилось, я попытался объяснить это вам. Пожалуйста, проверьте его. –

ответ

1

Позвольте мне дать вам краткое представление о вашем случае и о том, что вы должны делать.

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

Теперь в вашем случае: BufferWriter также очистит буфер до его закрытия, вызвав метод flush() внутри него и, следовательно, он пишет, когда вы его вызываете.

Но если вы хотите полностью написать силу, вы должны сбросить буфер, вызвав метод flush.

так просто позвоните logWriter.flush(); после того, как напишите все, и все готово.

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

public void writeInstantText(BufferedWriter logWriter, String logTXT){ 
    try 
    { 
     logWriter.write(logTXT + "\n"); 
     logWriter.flush(); 
    } catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

или просто добавить logWriter.flush() после write() метода.

+0

Я получил столько же от других комментариев и ответов, но я оцените тщательный ответ, спасибо. – Ryan

+1

Thats great. вы достаточно хороши, чтобы понять, но я написал этот ответ всем другим людям, которых мы будем читать, если будущий ... , потому что они не будут читать все комментарии. и ответ. они просто будут следовать принятому ответу или высоко проголосовавшему ответу. как я. :) –

1

BufferedWriter имеет буфер, поэтому он не будет записывать на диск до буфера валяется (если не называется флеш или закрытым способом)

Вы можете использовать PrintWriter.

+1

'PrintWriter' также потребует' flush() 'или' close() ' – JordanGS

+1

PrintWriter имеет метод построения' PrintWriter (OutputStream out, boolean autoFlush) ' – IMXQD

 Смежные вопросы

  • Нет связанных вопросов^_^