学习笔记之IO流(FileReader,FileWriter,文件拷贝)

时间:2021-09-18 21:36:41

------- android培训java培训、期待与您交流! ----------

一,首先附一个IO流的图解:

学习笔记之IO流(FileReader,FileWriter,文件拷贝)

 

二,FileReader类:创建一个文件读取流对象,和指定名称的文件相关联。

        注意点1,在使用的时候,要保证文件确实存在,否则会报FileNotFoundException的异常。

        注意点2:这个类有read()方法一次读取一个字符,会自动往下读,读到文件尾返回值为-1。

        注意点3:还有一个read(char[] cbuf)方法,会将读取的值存入cbuf数组,返回的是读到字符的个数。注意,如果数组长度小于文件长度的话,数组被存储满以后,将不再读取。

三,FileWriter类:

        注意点1在已有文件内容的文件尾续写内容,可以使用FileWriter(String fileName, boolean append)的方法。这个方法根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。fileName - 一个字符串,表示与系统有关的文件名;append - 一个 boolean 值,如果为true,则将数据写入文件末尾处,而不是写入文件开始处。

                 例如:

                           FileWriter fr = new FileWriter("Demo.txt",true);

                           fr.write("abc");

                           fr.close;

                           利用上面的代码可以在Demo.txt文件中续写abc三个字符。

          注意点2文件的续写换行问题——windows的文件中,换行是由两个字符\r\n组成的。

                  例如:

                           FileWriter fr = new FileWriter("Demo.txt",true);

                           fr.write("abc\r\ndef");//这样在Demo.txt文件中续写两行,第一行为abc,第二行为def

                           fr.close;

四,文件的拷贝:

        复制的原理:将c盘下的文件数据存储到d盘的一个文件中。

        复制的步骤:1,在d盘创建一个文件,用于存储c盘文件中的数据。

                                 2,定义读取流和c盘文件关联。

                                 3,通过不断的读写完成数据存储。

                                 4,关闭资源。

         例如:

                  FileWriter  fw = new FileWriter("a.txt");//创建目的地

                  FileReader fr = new FileReader("b.txt");//与已有文件关联

                  int ch= 0;

                  while((ch=fr.read())!=-1){

                            fw.writer(ch);

                  }

                 fw.close();

                 fr.close();

           上面的例子,是一个一个字符的读取写入

      再如:

              FileWriter fw = null;//养成编程的好习惯,局部变量要初始化

              FileReader fr = null;

              try{

                  fw = new FileWriter("a.txt");

                  fr = new  FileReader("b.txt");

                  char[] buf = new char[1024];

                  int len = 0;

                   while((len = fr.read(buf))!=-1){

                          //fw.write(buf);//使用这个方法会把所有的字符写入a.txt,如果最后一次读取的字符不满1024,那么会有不正确的数据写到a.txt

                           fw.write(buf,0,len);//这个方法可以把有效字符写入a.txt

                   }

              }

              catch(IXException e){

                     throw new RuntimeEXception("读写失败");

               }       

                finally{

                         //注意:关闭流的时候,要先进行判断流对象是否为空,因为如果前面在创建流的时候出现异常,到这里没有流对象,这时如果关闭会出错

                         if(fr != null) {

                                try{

                                      fr.close(); 

                                }

                                catch(IXException e){

                                }

                          }

                          if(fw != null) {

                                try{

                                          fw.close();

                                }

                                 catch(IXException e){

                                  }

                           }

 

                }