FileWriter
类的实现如下:
/** * 方法 1:使用 FileWriter 写文件 * @param filepath 文件目录 * @param content 待写入内容 * @throws IOException */ public static void fileWriterMethod(String filepath, String content) throws IOException { try (FileWriter fileWriter = new FileWriter(filepath)) { fileWriter.append(content); } }
只需要传入具体的文件路径和待写入的内容即可,调用代码如下:
public static void main(String[] args) { fileWriterMethod("/Users/mac/Downloads/io_test/write1.txt", "哈喽,Java中文社群."); }
然后我们打开写入的文件,实现结果如下:
关于资源释放的问题:在 JDK 7 以上的版本,我们只需要使用 try-with-resource 的方式就可以实现资源的释放,就比如使用 try (FileWriter fileWriter = new FileWriter(filepath)) {...} 就可以实现 FileWriter 资源的自动释放。
方法 2:BufferedWriter
BufferedWriter
也属于字符流体系的一员,与 FileWriter
不同的是 BufferedWriter
自带缓冲区,因此它写入文件的性能更高(下文会对二者进行测试)。
小知识点:缓冲区
缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
缓冲区的优势以文件流的写入为例,如果我们不使用缓冲区,那么每次写操作 CPU 都会和低速存储设备也就是磁盘进行交互,那么整个写入文件的速度就会受制于低速的存储设备(磁盘)。但如果使用缓冲区的话,每次写操作会先将数据保存在高速缓冲区内存上,当缓冲区的数据到达某个阈值之后,再将文件一次性写入到磁盘上。因为内存的写入速度远远大于磁盘的写入速度,所以当有了缓冲区之后,文件的写入速度就被大大提升了。
了解了缓存区的优点之后,咱们回到本文的主题,接下来我们用 BufferedWriter
来文件的写入,实现代码如下:
/** * 方法 2:使用 BufferedWriter 写文件 * @param filepath 文件目录 * @param content 待写入内容 * @throws IOException */ public static void bufferedWriterMethod(String filepath, String content) throws IOException { try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filepath))) { bufferedWriter.write(content); } }
调用代码和方法 1 类似,这里就不再赘述了。