FileWriter
The Java FileWriter class, java.io.FileWriter
, makes it possible to write characters to a file. In that respect the Java FileWriter works much like the FileOutputStream
except that a FileOutputStream
is byte based, whereas a FileWriter
is character based. The FileWriter
is intended to write text, in other words. One character may correspond to one or more bytes, depending on the character encoding scheme in use. The Java FileWriter
class is a subclass of the Java Writer class, by the way.
FileWriter Example
Here is a simple Java FileWriter
example:
Note: The proper exception handling has been skipped here for the sake of clarity. To learn more about correct exception handling, go to Java IO Exception Handling.
The FileWriter
has other constructors too, letting you specify the file to write to in different ways. Look in the official JavaDoc for more detailed info.
Overwriting vs. Appending the File
When you create a Java FileWriter
you can decide if you want to overwrite any existing file with the same name, or if you want to append to any existing file. You decide that by choosing what FileWriter
constructor you use.
The FileWriter
constructor taking just one parameter, the file name, will overwrite any existing file:
FileWriter
has a constructor that takes 2 parameters too: The file name and a boolean. The boolean indicates whether to append or overwrite an existing file. Here are two Java FileWriter
examples showing that:
FileWriter Character Encoding
The FileWriter
assumes that you want to encode the bytes to the file using the default character encoding for the computer your application is running on. This may not always be what you want, and you cannot change it!
If you want to specify a different character encoding scheme, don't use a FileWriter
. Use an OutputStreamWriter
on a FileOutputStream
instead. The OutputStreamWriter
lets you specify the character encoding scheme to use when writing bytes to the underlying file.
write(int)
The Java FileWriter
write(int)
method writes the lower 16 bit of the int
to the destination the FileWriter
is connected to, as a single character. Here is an example of writing a single character to a Java FileWriter
:
write(char[])
The Java FileWriter
also has a write(char[])
method which can write an array of characters to the destination the FileWriter
is connected to. The write(char[])
method returns the number of characters actually written to the FileWriter
. Here is an example of writing an array of chars to a Java FileWriter
:
Write Performance
It is faster to write an array of characters to a Java FileWriter than writing one character at a time. The speedup can be quite significant - up to 10 x higher or more. Therefore it is recommended to use the write(char[])
methods whenever possible.
The exact speedup you get depends on the underlying OS and hardware of the computer you run the Java code on. The speedup depends on issues like memory speed, hard disk speed and buffer sizes etc.
Transparent Buffering via BufferedWriter
You can get transparent buffering of bytes written to a Java FileWriter
by wrapping it in a Java BufferedWriter . All bytes written to the BufferedWriter
will first get buffered inside an internal byte array in the BufferedWriter
. When the buffer is full, the buffer is flushed to the underlying FileWriter
all at once. Here is an example of wrapping a Java FileWriter
in a BufferedWriter
:
You can read more about the BufferedWriter
in my BufferedWriter tutorial.
flush()
The Java FileWriter
's flush()
method flushes all data written to the FileWriter
to the underlying file. The data might be buffered in OS memory somewhere, even if your Java code has written it to the FileWriter
. By calling flush()
you can assure that any buffered data will be flushed (written) to disk. Here is an example of flushing data written to a Java FileWriter
by calling its flush()
method:
Closing a FileWriter
When you are finished writing characters to a Java FileWriter
you should remember to close it. Closing a FileWriter
is done by calling its close()
method. Here is how closing a Java FileWriter
looks:
You can also use the try-with-resources construct introduced in Java 7. Here is how to use and close a FileWriter
looks with the try-with-resources construct:
Notice how there is no longer any explicit close()
method call to the FileWriter
instance. The try-with-resources construct takes care of that.
Last updated