Java 中BufferedWriter 和

本文介绍了 Java 中 BufferedWriter 和 OutputStreamWriter 的使用方法及注意事项。通过示例代码展示了如何利用 BufferedWriter 提高文件写入效率,以及如何指定字符集使用 OutputStreamWriter 进行文件输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、BufferedWriter
public class BufferedWriter
     
   
    
      extends 
      
    Writer
     
   

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。

通常 Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如,

 PrintWriter out
   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
 

将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。

代码示例:

public void display(String fileName){
try {
FileWriter fw = new FileWriter("D:\\test\\Data1.txt");
BufferedWriter br = new BufferedWriter(fw);

String str ="曾经我以为不会在乎,可真到了今时今日,才发现在真相面前那么苍白无力!";

br.write("我爱你");
br.write(",Java");
br.write(str, 0, str.length());
br.flush();
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
BufferedWriterTest test = new BufferedWriterTest();
test.display("");
}


2、

OutputStreamWriter

public class OutputStreamWriter
     
   
    
      extends 
      
    Writer
     
   

OutputStreamWriter 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。

每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。

为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:

 Writer out
   = new BufferedWriter(new OutputStreamWriter(System.out));
public class OutputStreamWriterTest {
public void display(){
try {
OutputStream os = new FileOutputStream("D:\\test\\Data1.txt");
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
String str = "断剑重铸之日,我们开车之时!";
bw.write(str);
bw.flush();
try {
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();

}

public static void main(String[] args) {
OutputStreamWriterTest test = new OutputStreamWriterTest();
test.display();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值