Java IO: PrintWriter
Jakob Jenkov |
The Java PrintWriter
class (java.io.PrintWriter
) enables you to write formatted data to an
underlying Writer
. For instance, writing int
, long
and other primitive data
formatted as text, rather than as their byte values.
The Java PrintWriter
is useful if you are generating reports (or similar) where you have to mix text
and numbers. The PrintWriter
class has all the same methods as the
PrintStream
except for the methods to write raw bytes. Being a
Writer
subclass the PrintWriter
is intended to write text.
PrintWriter Example
Here is a simple Java PrintWriter
example:
FileWriter writer = new FileWriter("d:\\data\\report.txt"); PrintWriter printWriter = new PrintWriter(writer); printWriter.print(true); printWriter.print((int) 123); printWriter.print((float) 123.456); printWriter.printf(Locale.UK, "Text + data: %1$", 123); printWriter.close();
This example first creates a PrintWriter
instance which is connected to a FileWriter
.
Second, the example writes a boolean
, an int
and a float
to the
PrintWriter
. Third, the example calls the advanced printf()
method of the
PrintWriter
which can insert formatted numbers into a text string. Finally the PrintWriter
is closed.
PrintWriter Constructors
The PrintWriter
has a wide selection of contructors that enable you to connect it to
a File
, an OutputStream
, or a Writer
. In that way the PrintWriter
is a bit different from other Writer
subclasses which tend to have mostly constructors that can
take other Writer
instances as parameters (except for a few, like OutputStreamWriter
).
print() and format()
The Java PrintWriter
class contains the powerful format()
and printf()
methods. The two methods do exactly the same, but the name "printf" is more familiar to C-programmers.
The format()
and printf()
methods allow you to mix text and data in very advanced ways,
using a formatting string. For more information about format()
and printf()
see
this page:
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Closing a PrintWriter
When you are finished writing characters to the Java PrintWriter
you should remember to close it.
Closing a PrintWriter
will also close the Writer
instance to which the
PrintWriter
is writing.
Closing a PrintWriter
is done by calling its close()
method. Here is how
closing a PrintWriter
looks:
printWriter.close();
You can also use the try-with-resources construct
introduced in Java 7. Here is how to use and close a PrintWriter
looks with the try-with-resources
construct:
FileWriter writer = new FileWriter("data/report.txt"); try(PrintWriter printWriter = new PrintWriter(writer)){ printWriter.write("Hello World "); printWriter.write((int)123); }
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 FileWriter
instance is not created inside
the try-with-resources block. That means that the try-with-resources block will not automatically close this
FileWriter
instance. However, when the PrintWriter
is closed
it will also close the OutputStream
instance it writes to, so the FileWriter
instance will get closed when the PrintWriter
is closed.
Tweet | |
Jakob Jenkov |