将文本写入字符输出流,缓冲字符,以便高效地写入单个字符、数组和字符串。
可以指定缓冲区大小,也可以接受默认大小。 对于大多数用途,默认值足够大。
提供了一个 newLine() 方法,它使用由系统属性 line.separator 定义的平台自己的行分隔符概念。 并非所有平台都使用换行符 ('\n') 来终止行。 因此,调用此方法终止每个输出行优于直接写入换行符。
通常,Writer 会立即将其输出发送到底层字符或字节流。 除非需要提示输出,否则建议将 BufferedWriter 包裹在任何其 write() 操作可能代价高昂的 Writer 周围,例如 FileWriters 和 OutputStreamWriters。 例如,
PrintWriter out
= new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
会将 PrintWriter 的输出缓冲到文件中。 如果没有缓冲,每次调用 print() 方法都会导致字符被转换为字节,然后立即写入文件,这可能非常低效。
@Test
public void bufferedWriterWriteFile(){
String filePath = "C:\\Users\\JinZh\\IdeaProjects\\TestJa\\software\\copy_directory\\file02.txt";
BufferedWriter bufferedWriter = null;
try {
//拼接方式读取
bufferedWriter = new BufferedWriter(new FileWriter(filePath, true));
bufferedWriter.write("hello world1");
bufferedWriter.write("hello world2");
bufferedWriter.write("hello world3");
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if(bufferedWriter!=null){
bufferedWriter.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
拷贝文件
我们可以使用BufferedReader和BufferedWriter拷贝非二进制文件,如下。
@Test
public void bufferedCopy(){
String fromPath="C:\\Users\\JinZh\\IdeaProjects\\TestJa\\software\\file02.txt";
String toPath = "C:\\Users\\JinZh\\IdeaProjects\\TestJa\\software\\copy_directory\\file02.txt";
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
String line = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter(toPath, true));
bufferedReader = new BufferedReader(new FileReader(fromPath));
while ((line = bufferedReader.readLine())!=null){
bufferedWriter.write(line);
bufferedWriter.newLine();
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(bufferedWriter!=null){
bufferedWriter.close();
}
if(bufferedReader!=null){
bufferedReader.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}