How to use flush() for PrintWriter

janekey picture janekey · Mar 29, 2012 · Viewed 37.4k times · Source

I have some codes like this:

PrintWriter pw = new PrintWriter(new BufferedReader(....));
for(int i=0; i<10; i++) {
    pw.println("a");
    pw.flush();// flush each time when println()?
}
pw.close();

Is the flush() in each 'for' statement necessarily? I heard that flush() would auto invoke when invoke close() . If I write code like this:

PrintWriter pw = new PrintWriter(new BufferedReader(....), true);

and I wouldn't write pw.flush() anymore? Thanks.

Answer

NPE picture NPE · Mar 29, 2012

flush() is probably not required in your example.

What it does is ensure that anything written to the writer prior to the call to flush() is written to the underlying stream, rather than sit in some internal buffer.

The method comes in handy in several types of circumstances:

  1. If another process (or thread) needs to examine the file while it's being written to, and it's important that the other process sees all the recent writes.

  2. If the writing process might crash, and it's important that no writes to the file get lost.

  3. If you're writing to the console, and need to make sure that every message is shown as soon as it's written.