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();
,
Что я хотел бы видеть, так это String, добавляемый в файл сразу после вызова метода. Есть ли в любом случае, что я могу обойти это, или мне просто придется жить с этим, учитывая, что это не такая большая проблема.
2 ответа
Позвольте мне попытаться объяснить ваш запрос с подробным описанием и как вы можете решить вашу проблему.
Прежде всего BufferWriter
начинает хранить все данные в своем собственном буфере (который основан на распределении памяти), и как только буфер заполнен, он начинает запись в него и затем снова возвращается к заполнению этого буфера.
Это действительно важно, потому что операция ввода-вывода является слишком дорогостоящей и, следовательно, для того, чтобы сделать ее эффективной, этот буферный метод вошел в картину.
Однако если вы хотите записать в файл независимо от того, заполнен ли буфер или нет, есть метод flush()
что вы можете использовать, чтобы решить вашу проблему.
Теперь давайте рассмотрим ваш случай: когда вы звоните close()
метод, он внутренне вызывает flush()
метод, а затем продолжить для закрытия этого буфера. Вот почему вы можете увидеть изменения, когда вы закрываете его.
В общем, просто позвоните logWriter.flush();
после записи всего, и все готово (если вы хотите, чтобы BufferedReader записывал в определенное время).
используя все это, вы можете создать свой собственный метод, который может писать мгновенно.
public void writeInstantText(BufferedWriter logWriter, String logTXT ){
try
{
logWriter.write(logTXT + "\n");
logWriter.flush();
} catch(Exception e)
{
e.printStackTrace();
}
}
или просто добавь logWriter.flush()
после write()
метод.
BufferedWriter имеет буфер, поэтому он не будет записывать на диск до того, как буфер заполнится (если вы не вызвали метод flush или close)
Вы можете использовать PrintWriter.