黑马程序员——20,IO流,FileWriter,FileReader

来源:互联网 发布:如何连接redis数据库 编辑:程序博客网 时间:2024/05/09 16:13

------<ahref="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

          

                    黑马程序员——20,IO流,FileWriter,FileReader

 

/*

IO流的介绍:

IO流式用来处理数据传输的,与IO流相关的类都定义在了java.io包里面

按照操作类型分:字节流和字符流,其中的字符流与文字编码表有关。

字节流的抽象基类:

           IntputStream,   OutputStream

字符流的抽象基类:

           Reader,          Writer

*/

import java.io.*;class  Ioliou{         public  static void  main(String[] args)throws  IOException                   //IO流代码后容易抛出异常,所以一般都会在方法上抛出IOException         {                   FileWriter  f=new  FileWriter("f:\\yyyyyyy.txt");                   //FileWriter是用于操作文件的Writer类的子类对象                   /*                   这句话可以指定路径建立对应名字的文件,                   如果指定路径中已经存在同名文件,那么原本文件会被新建文件覆盖掉。                   */                                    f.write("jkl"); //将字符串写入流中                    /*                    但是此时如果打开yyyyyyy.txt文件看的话发现里面并没有写入jkl                    这是为什么呢?因为其写入的仅仅是流中,不是写入文件中                   */                    f.flush();//刷新流,把流里面的数据刷新到目的地                    /*                    此时再打开yyyyyyy.txt文件就会看见写入的jkl                    */                    f.close();//这句话作用是先刷新流,接着再关闭流                    f.write("rty");//由于前面关闭了流,所以这句话是写不进流里面的                    System.out.println("Hello World!");         }}

——————分割线——————

 

/*IO流异常处理的方式*/ import java.io.*;class  Ioliou2{         public   static  void   main(String[] args)         {                   //涉及到IO流的语句一般都会抛出异常,所以try块里面才那么多语句                  FileWriter  fi=null;                   //为什么要在前面定义fi为空?                   /*                   因为后面的finally块里面有fi,                   如果只是定义在try块里面,                   fi的作用域只是在try块里面。                   而后面还要调用fi.close();                   所以,这个变量必须是全局变量。                   至于初始化就放在try块里面。                   */                   try                   {                            fi=new   FileWriter("f:\\trtrtr.txt");                       fi.write("123");                       fi.flush();                    }                   catch(IOException  e)                   {                       soc(e.toString());                   }                   finally                   {                            try                            {                                     if(!(fi==null))                                  fi.close();                               /*                               关闭资源的动作硬要执行,所以放在finally块里面,                               又因为fi.close();也会抛出IO异常,                               所以也用try...catch块处理.                               为什么前面还要加一句判断是否为空?                               因为有可能开始建立文件就失败了,                               既然文件建立都失败了,那么还怎么关闭流呢?                               所以要加一个判断语句。                             */                            }                             catch(IOException  e)                            {                              soc(e.toString());                            }                                                              }                            }         public  static void  soc(Object  obj)         {             System.out.println(obj);                                   }}

——————分割线————

 

/*文件的续写:*/import java.io.*;class  Ioliou3{         public  static  void   main(String[] args)         {             FileWriter  fi=null;             try             {             fi=new  FileWriter("f:\\trtrtr.txt",true);                   /*             因为新建文件会覆盖原有文件,所以,FiletWriter类提供一个构造函数             FileWriter(String  s,boolean  b)  表示可以在原有文件后面续写数据                                        */             fi.write("我是\r\n英雄");                   /*             这句话表示输入数据“我是”然后换行接着输入数据“英雄”。             为什么要在\n前面加上\r呢?             因为\r\n写在一起在window系统里面才表示换行,             仅仅是\n只是在java里面才表示换行。             如果写的是fi.write("我是\n英雄");             那么在java里面显示的确是会换行,但是用window系统里面的工具打开,             “我是”与“英雄”之间会有一个黑块。这是window系统无法识别单独的\n的原因。                   */                                     }             catch(IOException   e)             {               soc(e.toString());                                              }             finally             {                try                {                     fi.close();                      }                catch(IOException  e)                {                  soc(e.toString());                }                                         }                                System.out.println("HelloWorld!");             }         public  static  void  soc(Object  obj)         {             System.out.println(obj);                                       }}

————————分割线——————

 

 

/*数据的读取*/import java.io.*;class  Ioliou4                  {         public   static  void  main(String[] args)         {                   FileReader   re=null;                   try                   {                   re=new  FileReader("f:\\trtrtr.txt");                   /*                   建立一个文件读取流对象,并且指向已经存在的文件!                   如果文件不存在,运行会发生FileNotFoundException                   */                   while(true)                      {                                                   int i=re.read();                             char ch=(char)i;                        soc(ch);                             if(i==-1)                        break;                                int i2=re.read();                             /*                             read方法一次读取一个字符,返回的是int型数据,可以自动往下读取,                             而且如果后面读到没有数据可读的时候就会返回-1,如果被强制转成字                             符打印出来的是一个问号?                        */                         char ch2=(char)i2;                        soc(ch2);                             if(i2==-1)                   break;                       }                   }                   catch(IOException  e)                   {                            soc(e.toString());                   }                   finally                   {                            try                            {                                     re.close();//仅仅是关闭流                                  }                            catch(IOException  e)                            {                                     soc(e.toString());                            }                                                    }          }         public  static void  soc(Object  obj)         {                System.out.print(obj);                         }}

——————分割线——————

 

 

/*

第二种数据读取方式:调用read(char[]  ch)

                  

按照字符数组长度来读取,返回的是读取到的字符个数,

例如在本题中,长度为3的字符数组,读取的时候从第一位到第三位

填充字符,填充完了就返回填充的个数;再次调用read方法的时候,

会自动往下继续读取字符,又从第一位到第三位重新填充字符;

如果在某一次填充字符过程中,字符数组还没有填充完就没有字符继续填充的情况下,

这一次返回的是本次填充字符的个数,返回值也许不是字符数组长度,

如果在某一次填充字符过程中,字符数组还没有填充完就文件字符换行的情况下,

本次就只是填充到换行处,返回本次填充字符个数,下一次填充字符又从第一位开始填充下一行的字符。

再接下来,继续调用read方法读取,在上一次已经全部读取完字符了,那么这一次,返回值-1

读取一些比较大的文件的时候,一般定义字符数组长度1024

                  

*/


import java.io.*;class  Ioliou5{         public   static  void   main(String[] args)         {           FileReader   fr=null;                   try                   {                   fr=new FileReader("f:\\trtrtr.txt");                   char[]  ch=new  char[5];                    int     i  =0;                   while((i=fr.read(ch))!=-1)                   {             soc(new String(ch,0,i));                   /*                 new  String(ch,0,i)表示新建一个字符串,                   其内容为字符数组ch的从0位开始长度为i的字符组成。             */                       }                                     }                   catch(IOException  e)                   {                        soc(e.toString());                   }                   finally                   {                            try                            {                                     fr.close();                            }                            catch(IOException   e)                            {                                     soc(e.toString());                            }                                                                       }          }          public  static void  soc(Object  obj)         {             System.out.println(obj);                                 }}

——————分割线——————

 

/*把文件从f盘复制到d盘*/ import java.io.*;class   Ioliou6{         public  static void  main(String[] args)         {                   FileWriter  fw=null;                   FileReader  fr=null;                   try                   {                   fw=new FileWriter("d:\\trtrtr_copy.txt");                      //建立一个写入流对象,指定存储的路径的文件                     fr=new FileReader("f:\\trtrtr.txt");                     //建立一个读取流对象,与目的地相关联                      char[]  ch=new  char[1024];                      int i=   0;                      while((i=fr.read(ch))!=-1)                       {                           fw.write(ch,0,i);                                     /*                                               按照字符数组ch从0位开始长度为i把字符写进流中                           */                        }                                             }                   catch(IOException  e)                   {                      throw  new  RuntimeException("读写出问题了");                             //抛出一个运行异常对象                   }                   finally                   {                            try                            {                                     if(fw!=null)                               fw.close();                             }                            catch(IOException  e)                            {                                                   }                       try                       {                          if(fr!=null)                           fr.close();                       }                       catch (IOException  e2)                       {                                            }                                              }                            }         public  static void  soc(Object  obj)         {               System.out.println(obj);                             }} 

0 0
原创粉丝点击