Java FileWriter
Java FileWriter类java.io.FileWriter
使将字符写入文件成为可能。在这方面,Java FileWriter的工作方式与FileOutputStream
相似,不同之处在于FileOutputStream
基于字节,而FileWriter
基于字符。换句话说," FileWriter"旨在编写文本。一个字符可以对应一个或者多个字节,这取决于所使用的字符编码方案。顺便说一下,JavaFileWriter
类是Java Writer类的子类。
FileWriter示例
这是一个简单的JavaFileWriter
示例:
Writer fileWriter = new FileWriter("data\filewriter.txt"); fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3"); fileWriter.close();
注意:为清楚起见,此处已跳过适当的异常处理。要了解有关正确的异常处理的更多信息,请转到Java IO异常处理。
FileWriter还具有其他构造函数,可让我们指定要以不同方式写入的文件。在官方JavaDoc中查找更多详细信息。
覆盖与追加文件
创建Java FileWriter时,可以决定是否要覆盖具有相同名称的任何现有文件,或者是否要追加到任何现有文件中。我们可以通过选择使用的FileWriter
构造函数来决定。
仅使用一个参数(文件名)的FileWriter
构造函数将覆盖任何现有文件:
Writer fileWriter = new FileWriter("c:\data\output.txt");
FileWriter具有一个也带有2个参数的构造函数:文件名和一个布尔值。布尔值指示是追加还是覆盖现有文件。这是两个JavaFileWriter
示例,它们显示了这一点:
Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to file Writer fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file
FileWriter字符编码
" FileWriter"假定我们要使用运行应用程序的计算机的默认字符编码将字节编码为文件。这可能并不总是我们想要的,并且我们无法更改它!
如果要指定其他字符编码方案,请不要使用FileWriter
。在FileOutputStream
上使用OutputStreamWriter
代替。使用OutputStreamWriter可以指定在将字节写入底层文件时使用的字符编码方案。
write(int)
Java FileWriter的write(int)方法将int的低16位作为单个字符写入到FileWriter所连接的目的地。这是将单个字符写入JavaFileWriter
的示例:
FileWriter fileWriter = new FileWriter("data/output.txt"); fileWriter.write('A');
write(char [])
Java FileWriter还具有一个write(char [])方法,该方法可以将字符数组写入到FileWriter连接到的目标位置。 write(char [])方法返回实际写入FileWriter的字符数。这是将字符数组写入JavaFileWriter
的示例:
FileWriter fileWriter = new FileWriter("data/output.txt"); char[] chars = new char[]{'A','B','C','D','E'}; fileWriter.write(chars);
写入的性能
向Java FileWriter中写入字符数组比一次写入一个字符要快。高达10倍甚至更高的加速比可能是非常显着的。因此,建议尽可能使用write(char [])方法。
我们获得的确切速度取决于运行Java代码的计算机的基础操作系统和硬件。加速取决于诸如内存速度,硬盘速度和缓冲区大小等问题。
通过BufferedWriter进行透明缓冲
通过将其包装在Java BufferedWriter中,可以对写入JavaFileWriter
的字节进行透明缓冲。写入" BufferedWriter"的所有字节将首先在" BufferedWriter"的内部字节数组内进行缓冲。当缓冲区已满时,缓冲区立即全部刷新到底层的" FileWriter"。这是将JavaFileWriter
包装在BufferedWriter
中的示例:
int bufferSize = 8 * 1024; Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );
我们可以在我的BufferedWriter教程中阅读有关BufferedWriter
的更多信息。
flush()
Java FileWriter的flush()方法将所有写入FileWriter的数据刷新到基础文件。即使Java代码已将数据写入到FileWriter中,数据也可能会缓存在OS内存中的某个位置。通过调用flush()
,可以确保所有缓冲的数据都将被刷新(写入)到磁盘上。这是通过调用Java的FileFriter方法来刷新写入Java FileWriter的数据的示例:
fileWriter.flush();
关闭FileWriter
完成将字符写入JavaFileWriter
后,我们应该记住将其关闭。关闭FileWriter是通过调用其close()方法来完成的。这是关闭JavaFileWriter
的样子:
fileWriter.close();
我们还可以使用Java 7中引入的try-with-resources构造。这是如何使用try-with-resources构造使用和关闭FileWriter
外观的方法:
try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3"); }
注意,不再有对FileWriter实例的显式close()方法调用。 try-with-resources构造可以解决这一问题。