Java基础知识十二:字节输入流OutputStreamReader,字符缓冲流输入输出流BufferedWtiger与BufferedReader

本文详细介绍了Java中字符流OutputStreamWriter和InputStreamReader的使用,包括默认和指定编码写入、读取文件。此外,还展示了字符流写数据的五种方式和读数据的两种方式,并演示了字符流复制文件的两种方法。进一步,文章探讨了字符缓冲流BufferedWriter和BufferedReader的使用,包括它们的换行方法和读取整行的功能,并提供了缓冲流复制文件的实例。最后,通过BufferedReader的readLine()方法改进了文件复制的实现。

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

OutputStreamReader: 字符输出流

//字符输入流、输出流编码与解码
public class OutAndInpuStreamDemo2 {
   public static void main(String[] args) throws IOException {
       //字符输出流写数据,默认编码格式utf-8
       OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:\\test\\java.txt"));
       osw.write("中国");
       osw.close();
       //字符输出流写数据,指定编码格式GBK
       OutputStreamWriter osw1 = new OutputStreamWriter(new FileOutputStream("f:\\test\\ps.txt"),"GBK");
       osw1.write("中华人民共和国");
       osw1.close();
       //符输入流读数据,默认编码格式utf-8
       InputStreamReader isr = new InputStreamReader(new FileInputStream("f:\\test\\java.txt"));
       int bys;
       while((bys=isr.read())!=-1){
           System.out.print((char)bys);
       }
       isr.close();
       //符输入流读数据,指定编码格式GBK
       InputStreamReader isr1 = new InputStreamReader(new FileInputStream("f:\\test\\ps.txt"),"GBK");
       int bys1;
       while((bys1=isr1.read())!=-1){
           System.out.print((char)bys1);
       }
       isr1.close();
   }
}

字符流写数据的5种方式

542a99962a7b4cc6b3bf5106aa7c7d35.png 

//字符流写数据的5种方式
public class OutAndInpuStreamDemo3 {
   public static void main(String[] args) throws IOException {
       OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:\\test\\ps.txt"));
       //第一种方式写数据:写字符数据
      /* osw.write(97);//写数据是字节流,创建的字符流对象相对字节流来说是有缓冲的,所以要进行刷新才能写入
       osw.flush();//刷新流的缓冲
       osw.close();//先刷新缓冲,再关闭流,:怕忘记手动调用刷新flush()*/

      //第二种:写入一个字符数组
       /*char[] chs = {'a','b','c','d','e','f'};
       osw.write(chs);
       osw.close();*/

       //第三种:写入一个字符数组的一部分数据
      /* char[] chs1 = {'a','b','c','d','e','f'};
       //osw.write(chs1,0,chs1.length);//从0索引开始,写到字符数组的最大索引结束
       osw.write(chs1,2,4);//从2索引开始,写到字符数组的4索引结束
       osw.close();*/

       //第四种:写一个字符串数据
       /*osw.write("abcde");
       osw.close();*/

       //第五种:写一个字符串数据的一部分
       osw.write("abcdefghijklm",2,5);
       osw.close();
   }
}

字符流读取数据的2种方式

//字符流读数据的2种方式
public class OutAndInpuStreamDemo4 {
   public static void main(String[] args) throws IOException {
       InputStreamReader isr = new InputStreamReader(new FileInputStream("f:\\test\\ps.txt"),"GBK");
       //第一种方式:一次读一个字符数据
      /* int ch;
       while((ch=isr.read())!=-1){
           System.out.print((char)ch);
       }*/

      //第二种方式:一次读一个字符数组
       char[] chs = new char[1024];
       int len;
       while((len=isr.read(chs))!=-1){
           System.out.println(new String(chs,0,len));
       }
       isr.close();
   }
}

字符流对象复制文件的2种方式

//字符流对象:复制文件2种方式
public class OutAndInpuStreamDemo5 {
   public static void main(String[] args) throws IOException {
       //根据数据源创建字符输入流对象
       InputStreamReader isr = new InputStreamReader(new FileInputStream("f:\\test\\ps.txt"),"GBK");
       //根据数据源创建字符输出流对象
       OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("f:\\test1\\copy.txt"),"GBK");
       //读写数据、复制文件
       //第一种方式:一次读写一个字符数据
       /*int ch;
       while((ch=isr.read())!=-1){
           osw.write(ch);
       }*/

       //第二种方式:一次读写一个字符数组
       char[] chr = new char[1024];
       int len;
       while((len=isr.read(chr))!=-1){
           osw.write(chr,0,len);
       }
       isr.close();
       osw.close();
   }
}

字符流对象复制文件(升级版)

1、InputStreamReader子类FileReader 可以替代读取文件,涉及编码格式还是需要InputStreamReader处理

2、OutputStreamWriter子类FileWriter可以替代写入文件,涉及编码格式还是需要OutputStreamWriter处理

//字符流对象:复制文件改进版
public class OutAndInpuStreamDemo6 {
   public static void main(String[] args) throws IOException {
       FileReader fr = new FileReader("f:\\test\\js.txt");
       FileWriter fw = new FileWriter("f:\\test1\\copy.txt");
       //第一种方式:一次读写一个字符数据
       /*int len;
       while((len=fr.read())!=-1){
           fw.write(len);
       }
       fr.close();
       fw.close();*/

       //第二种方式:一次读写一个字符数组
       char[] chs = new char[1024];
       int len;
       while((len=fr.read())!=-1){
           fw.write(chs,0,len);
       }
       fr.close();
       fw.close();
   }
}

字符缓冲流读写文件

1、BufferedWriter:字符输出缓冲流 ,默认大小8192

2、BufferedReader:字符输入缓冲流,默认大小8192

//字符缓冲流
public class OutAndInpuStreamDemo7 {
   public static void main(String[] args) throws IOException {
       //字符缓冲输出流
      /* BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\aa.txt"));
       bw.write("hello\r\n");
       bw.write("world\r\n");
       bw.write("beijing\r\n");
       bw.close();*/
       //字符缓冲输入流
       BufferedReader br = new BufferedReader(new FileReader("f:\\test\\aa.txt"));
       //第一种方式:读取单个字节
       /*int ch;
       while((ch=br.read())!=-1){
           System.out.print((char)ch);
       }
       br.close();*/
       //第二种方式:读取一个字节数组
       int len;
       char[] chs = new char[1024];
       while((len=br.read(chs))!=-1){
           System.out.println(new String(chs,0,len));
       }
       br.close();
   }
}

字符缓冲流复制文件

//字符缓冲流复制文件
public class OutAndInpuStreamDemo8 {
   public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new FileReader("f:\\test\\aa.txt"));
       BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test1\\aa.txt"));
       //第一种方式:一次读取一个字节
       int bys;
       while((bys=br.read())!=-1){
          bw.write(bys);
       }
       //第二种方式:一次读取一个字节数组
       int len;
       char[] chs = new char[1024];
       while((len=br.read(chs))!=-1){
           bw.write(chs,0,len);
       }
       br.close();
       bw.close();
   }
}

 字符缓冲流特有功能

1、newLine(): 换行

2、readLine(): 读取一行文字,读到null就结束

//字符缓冲流特有方法
public class OutAndInpuStreamDemo9 {
   public static void main(String[] args) throws IOException {
       //字符缓冲输出流特有方法:newLine()
       BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test\\ps.txt"));
       for(int i=0;i<10;i++){
           bw.write("hello"+i);
           //bw.write("\r\n");//传统换行需要根据系统来定
           bw.newLine();//特有方法换行会自动识别系统
           bw.flush();//刷新
       }
       bw.close();

       //字符缓冲输入流特有方法:readLine()
       BufferedReader br = new BufferedReader(new FileReader("f:\\test\\ps.txt"));
       String line;
       while((line=br.readLine())!=null){
           System.out.println(line);//只读换行,不读换行符号
       }
       br.close();
   }
}

20、 字符缓冲流特有功能改进复制文件

//最常用的方式
//字符缓冲流特有功能改进复制文件案例
public class OutAndInpuStreamDemo10 {
   public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new FileReader("f:\\test\\ps.txt"));
       BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\test1\\ps.txt"));
       String line;
       while((line=br.readLine())!=null){
           bw.write(line);
           bw.newLine();
           bw.flush();
       }
       br.close();
       bw.close();
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜀州凯哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值