文件字符流FileReader,FileWriter


四个步骤:创建File实例,指明文件路径,创建FileReader或FileWriter的实例,进行读入或者写出操作,read,write方法,最后关闭流.

  1 public class ReaderWriterStream {
  2     /**
  3      * Io流原理及流的分类:
  4      * 一:流的分类
  5      * 按照数据单位不同分为:字节流,字符流
  6      * 根据流向不同分为:输入,输出流
  7      * 根据流的角色不同分为:节点流,处理流
  8      * 二:流的体系结构
  9      * 抽象基类:                节点流(文件流):                缓冲流(处理流的一种)
 10      * inputStream              FileInputStream              BufferInputStream
 11      * outputStream             FileOutputStream             BufferOutputStream
 12      * Reader                   FileReader                   BufferReader
 13      * Writer                   FileWriter                   BufferWriter
 14      *说明:
 15      * 1:read()方法:返回读入的一个字符,如果是空的返回-1
 16      * 2:异常的处理:为了保证流一定执行关闭操作,必须使用try-catch-finally处理
 17      * 3:读入的文件一定要存在,否则出现FileNotFoundException
 18      *流使用的步骤:
 19      * 1:File类的实例化,创建文件目录
 20      * 2:FileReader流的实例化,将File实例放进去
 21      * 3:进行读入操作
 22      * 4:流的关闭
 23      *
 24      *
 25      */
 26     @Test
 27     public void test() {
 28         //将此文件内容读入程序中,通过控制台打印出来
 29         FileReader fileReader= null;
 30         try {
 31         File file=new File("hello.txt");//相对路径
 32         fileReader = new FileReader(file);
 33             int date;//read();返回读入的一个字符,如果达到文件末尾,返回-1;如果是空文件返回-1;
 34             while ((date=fileReader.read())!=-1){
 35             System.out.println((char) date);//返回的Ascii码值,所以要强转一下
 36                    //read底层自带迭代,//通过FileReader流进行读入
 37         }
 38         }  catch (IOException e) {
 39             e.printStackTrace();
 40         } finally {
 41             try {
 42                 if (fileReader!=null)//判断fileReader对象是否实例化,防止空指针
 43                 fileReader.close();//流的关闭,一定要加上
 44             } catch (IOException e) {
 45                 e.printStackTrace();
 46             }
 47         }
 48         //对于IO流,socket等物理连接 JVM虚拟机不会进行内存回收,不关闭会造成内存泄露
 49         System.out.println("文件已到末尾");
 50     }
 51     //对read方法的一个升级;使用read的重载方法
 52     @Test
 53     public void test2(){
 54         FileReader fileReader=null;
 55         try {
 56 //         1:File类的实例化,创建文件目录
 57             File file = new File("hello.txt");
 58 //         * 2:FileReader流的实例化,将File实例放进去
 59            fileReader = new FileReader(file);
 60 //         * 3:进行读入操作
 61             char[] chars = new char[5];
 62             int len;
 63             while ((len=fileReader.read(chars))!= -1) {
 64                 for (int i = 0; i < len; i++) {
 65                     System.out.println(chars[i]);
 66                 }
 67             }
 68         }
 69         catch (IOException e){
 70             e.printStackTrace();
 71         }finally {
 72             if (fileReader!=null)
 73             try {
 74 //         * 4:流的关闭
 75                 fileReader.close();
 76             } catch (IOException e) {
 77                 e.printStackTrace();
 78             }
 79         }
 80     }
 81     /**
 82      *
 83      *从内存中写出数据到硬盘的文件里
 84      *File对应的文件如果不存在,会自动创建文件
 85      *File对应文件如果存在,如果使用的构造器是FileWriter(file,false)/FileWriter(file):就会对原有文件进行覆盖
 86      *如果使用的构造器是FileWriter(file,true)不会进行覆盖,而是在原有基础上进行添加
 87      *
 88      *
 89      */
 90     @Test
 91     public void test3()throws IOException{
 92         //提供File类的对象,指明写出的文件
 93         File file=new File("hello.txt");
 94         //提供FileWriter的对象,写出数据
 95         FileWriter fileWriter=new FileWriter(file,false);
 96         //写出的操作
 97         fileWriter.write("你好世界!");
 98         fileWriter.write("吃完饭了");
 99         //流的关闭
100         fileWriter.close();
101     }
102 
103 
104 
105     @Test
106     public void test4(){
107         FileReader fileReader = null;//创建读入对象
108         FileWriter fileWriter=null;
109         try {
110             File file = new File("hello.txt");//创建文件
111             File file2 = new File("hello1.txt");//创建文件
112             fileReader = new FileReader(file);
113             fileWriter = new FileWriter(file2);
114             char[] chars = new char[5];
115             int num;
116             while ((num = fileReader.read(chars)) != -1) {
117                 fileWriter.write(chars, 0, num);//每次读出去几个就写进去几个
118             }
119         } catch (IOException e) {
120             e.printStackTrace();
121         } finally {
122             try {
123                 fileReader.close();
124             } catch (IOException e) {
125                 e.printStackTrace();
126             }
127             try {
128                 fileWriter.close();
129             } catch (IOException e) {
130                 e.printStackTrace();
131             }
132         }
133 
134     }
135 }