Java学习之IO流(字符流)

字符流:顾名思义操作(读、写)字符的流对象

字符流的体系:

1、Reader
  |--BufferedReader:从字符输入流中读取文本到缓冲区,便于有效读取字符,数组,和行
    |--LineNumberReader:有行号(setLineNumber(int) 、getLineNumber())
  |--InputStreamReader:字节流到字符流
    |--FileReader:将字符文件数据读取到缓冲区中

2、Writer
  |--BufferedWriter:将文本写入字符输出流到缓冲区,便于有效写入单个字符,数组和字符串。
  |--OutputStreamWriter:字节流到字符流
    |--FileWriter:将缓冲区数据写入字符文件

一、FileReader和FileWriter

FileReader原理:将指定的文本文件读到内存中

FileWriter原理:把内存中字符数据写入到实体设备上(落地)。

以文本文件Copy为例:

 1     private static final int BUFFER_SIZE = 1024;
 2 
 3     public static void main(String[] args) {
 4     fileCopy();
 5     }
 6 
 7     private static void fileCopy() {
 8     FileReader fr=null;
 9     FileWriter fw=null;
10     try {
11         /*
12          * 1、必须要明确被读取的文件,一定要确认文件时存在的。
13          */
14         fr=new FileReader("demo.txt");
15         /*
16          * 2、明确copy目的地
17          * 如果文件不存在,自动创建 如果文件存在,会覆盖(删除再创建)
18          */
19         fw=new FileWriter("CopyDemo2.txt");
20         
21         //方式一:一个字符读取
22 //        int ch=0;
23 //        while((ch=fr.read())!=-1) {
24 //            fw.write(ch);
25 //        }
26         
27         //方式二:先把读取数据放入固定缓存中,然后把固定缓存写到硬盘
28         //创建一个临时容器,用于缓存读取到的字符
29         char[] buff=new char[BUFFER_SIZE];
30         //记录读取到的字符数(其实就时向数组中装的字符个数)
31         int len=0;
32         while((len=fr.read(buff))!=-1) {
33         /*
34          * 把内容存储器读到内容全部写入到输出流中
35          * 此时没有写入实体设备中(这里指硬盘)
36          */
37             fw.write(buff,0,len);
38         }
39         
40     }  catch (IOException e) {
41         throw new RuntimeException();
42     }finally {
43         if(fr!=null)
44         try {
45             fr.close();
46         } catch (IOException e) {
47             
48             throw new RuntimeException();
49         }
50         if(fw!=null)
51         try {
52             fw.close();//先刷新,将输出流中数据写到实体设备中,关闭系统资源,
53         } catch (IOException e) {
54             throw new RuntimeException();
55         }
56     }
57  }

分析:

 二、BufferedReader和BufferedWriter

BufferedReader和BufferedWriter其实就是Reader和Writer的装饰类,主要目的是为了提高读写效率。

Copy文本文件实例:

 1 private static void fileCopy() {
 2     BufferedReader br = null;
 3     BufferedWriter bw = null;
 4     try {
 5         /*
 6          * 1、必须要明确被读取的文件,一定要确认文件时存在的。
 7          */
 8         FileReader fr = new FileReader("demo.txt");
 9         br = new BufferedReader(fr);
10         /*
11          * 2、明确copy目的地 如果文件不存在,自动创建 如果文件存在,会覆盖(删除再创建)
12          */
13         FileWriter fw = new FileWriter("CopyDemo2.txt");
14         bw = new BufferedWriter(fw);
15         /*
16                   String len = null; 
17                   while ((len = br.readLine()) != null) 
18                   { 
19                           bw.write(len);
20                           bw.newLine();//会在文本文件最后多一个空行,没想到解决方法
21                           bw.flush();//防止程序非正常停止
22                   }
23          */
24         /*
25                 int len = 0;
26                 while ((len = br.read()) != -1) {
27                 bw.write(len);
28                 bw.flush();//防止程序非正常停止
29                 }
30          */
31         
32         char[] buff=new char[1024];
33         int len = 0;
34         while ((len = br.read(buff)) != -1) {
35         bw.write(buff,0,len);
36         bw.flush();//防止程序非正常停止
37         }
38         
39 
40     } catch (IOException e) {
41         throw new RuntimeException();
42     } finally {
43         if (br != null)
44         try {
45             br.close();
46         } catch (IOException e) {
47 
48             throw new RuntimeException();
49         }
50         if (bw != null)
51         try {
52             bw.close();// 先刷新,将输出流中数据写到实体设备中,关闭系统资源,
53         } catch (IOException e) {
54             throw new RuntimeException();
55         }
56     }
57  }

猜你喜欢

转载自www.cnblogs.com/WarBlog/p/12126351.html
今日推荐