🌺个人主页:杨永杰825_Spring,Mysql,多线程-CSDN博客
⭐每日一句:成为架构师路途遥远
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️
目录
前言
- Java的BufferedWriter是一个字符输出流,它将文本写入字符输出流中,并提供了缓冲区的功能,可以提高写入效率。
- BufferedWriter的构造方法接受一个Writer对象作为参数。它继承自Writer类,因此可以使用Writer类的所有方法,比如write()、flush()、close()等。
- 使用BufferedWriter的优点是可以减少对磁盘的频繁访问,通过在内存中使用缓冲区,将数据一次性写入磁盘,减少了磁盘IO的次数,提高了写入效率。
- 使用BufferedWriter时,需要自行调用flush()方法以确保所有数据被写入到磁盘。
方法
Modifier and Type | Method and Description |
---|---|
void | close() 关闭流,冲洗它。 |
void | flush() 冲流。 |
void | newLine() 写行分隔符。 |
void | write(char[] cbuf, int off, int len) 写入一个字符数组的一部分。 |
void | write(int c) 写一个字符。 |
void | write(String s, int off, int len) 写入字符串的一部分。 |
案例
下面是一个使用BufferedWriter写入文件的示例代码:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
try {
// 创建BufferedWriter对象
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
// 写入数据
writer.write("Hello, World!");
// 刷新缓冲区,确保数据被写入到磁盘
writer.flush();
// 关闭BufferedWriter
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 在上面的示例中,创建了一个BufferedWriter对象,并使用FileWriter将其与一个文件连接起来。然后使用write()方法写入数据,并调用flush()方法刷新缓冲区,最后关闭BufferedWriter对象。
- 需要注意的是,在使用BufferedWriter写入数据时,并不是立即将数据写入磁盘,而是将数据先存储在内存的缓冲区中,当缓冲区满或者手动调用flush()方法时,才将缓冲区中的数据写入磁盘。这样可以减少对磁盘的访问次数,提高写入效率。
实践
BufferedWriter在实践中常用于写入大量文本数据,例如生成日志文件、写入配置文件等。
下面是一个简单的示例,展示如何使用BufferedWriter写入一批数据到文件中:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
try {
// 创建BufferedWriter对象
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
// 写入数据
for (int i = 1; i <= 1000000; i++) {
writer.write("Line " + i);
writer.newLine(); // 换行
}
// 刷新缓冲区,确保数据被写入到磁盘
writer.flush();
// 关闭BufferedWriter
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 在上面的示例中,通过循环将1到1000000的数字写入文件中,每个数字占一行。使用newLine()方法在每行的末尾添加换行符。最后调用flush()方法刷新缓冲区,将数据写入磁盘。
- BufferedWriter还提供了其他一些方法,例如append()方法用于追加数据,write(char[] cbuf, int off, int len)方法用于写入字符数组的一部分数据等。根据具体需求,可以选择合适的方法来使用BufferedWriter。
- 需要注意的是,在使用BufferedWriter写入大量数据时,建议及时调用flush()方法将数据写入磁盘,否则可能会导致大量数据滞留在缓冲区中,占用过多的内存。同时,使用完BufferedWriter后,记得及时关闭流,释放资源。
扩展
在使用BufferedWriter写文件时,可以通过指定字符编码来设置文件的编码格式。可以使用OutputStreamWriter来包装BufferedWriter,并在创建OutputStreamWriter时指定编码。
下面是一个示例,展示如何使用BufferedWriter写文件并设置编码格式为UTF-8:
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class BufferedWriterEncodingExample {
public static void main(String[] args) {
try {
// 创建BufferedWriter对象,并使用OutputStreamWriter指定编码格式为UTF-8
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("output.txt"), "UTF-8"));
// 写入数据
writer.write("Hello, 你好!");
// 刷新缓冲区,确保数据被写入到磁盘
writer.flush();
// 关闭BufferedWriter
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 在上面的示例中,创建BufferedWriter时,使用OutputStreamWriter将FileOutputStream包装,并在构造函数中指定编码格式为UTF-8。然后通过BufferedWriter写入字符串数据。最后调用flush()方法刷新缓冲区,并关闭BufferedWriter。
- 注意,要确保使用的编码与读取文件时的编码一致,否则可能导致读取出现乱码的问题。