Java IO: PrintStream
Jakob Jenkov |
The Java PrintStream class (java.io.PrintStream) enables you to write formatted data to an underlying OutputStream.
The PrintStream class can format primitive types like int, long etc.
formatted as text, rather than as their byte values. That is why it is called a PrintStream, because it
formats the primitive values as text - like they would look when printed to the screen (or printed to paper).
PrintStream Example
Here is a simple Java PrintStream example:
PrintStream printStream = new PrintStream(outputStream); printStream.print(true); printStream.print((int) 123); printStream.print((float) 123.456); printStream.close();
This example first creates a PrintStream which is connected to an OutputStream.
Second, the
example prints three primitivate values to the PrintStream. Third, the example closes
the PrintStream.
The instantiation of the OutputStream which the PrintStream writes to is left out of the
example for brevity. The PrintStream has a wide selection of constructors that enable you to connect it to
a File, an OutputStream etc.
System.out and System.err are PrintStreams
You may be familiar with these two well-known PrintStream instances in Java: System.out and
System.err . If you have every used any of these two streams, you have already used a PrintStream.
printf()
The Java PrintStream class contains the powerful format() and printf()
methods (they do exactly the same, but the name "printf" is more familiar to C-programmers). These methods
allow you to mix text and data in very advanced ways, using a formatting string.
Here is a simple Java printf() example:
PrintStream printStream = new PrintStream(outputStream); printStream.printf(Locale.UK, "Text + data: %1$", 123); printStream.close();
For more information about format() and printf() see the JavaDoc.
Closing a PrintStream
When you are finished writing data to the PrintStream you should remember to close it.
Closing a PrintStream will also close the OutputStream instance to which the
PrintStream is writing.
Closing a PrintStream is done by calling its close() method. Here is how
closing a PrintStream looks:
printStream.close();
You can also use the try-with-resources construct
introduced in Java 7. Here is how to use and close a PrintStream looks with the try-with-resources
construct:
OutputStream output = new FileOutputStream("data/data.bin");
try(PrintStream printStream =
new PrintStream(output)){
printStream.writeInt(123);
printStream.writeFloat(123.45F);
printStream.writeLong(789);
}
Notice how there is no longer any explicit close() method call. The try-with-resources construct
takes care of that.
Notice also that the first FileOutputStream instance is not created inside
the try-with-resources block. That means that the try-with-resources block will not automatically close this
FileOutputStream instance. However, when the PrintStream is closed
it will also close the OutputStream instance it writes to, so the FileOutputStream
instance will get closed when the PrintStream is closed.
| Tweet | |
Jakob Jenkov | |











