IO:字符流、字节流

IO

流按操作数据分为两种:字节流与字符流

流按流向分为:输入流、输出流

 

字节流的抽象基类:

InputStream

OutputStream

 

字符流的抽象基类:

Reader

Witer

这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

 

字符流:写入流Writer

用于操作文件的Writer子类对象,FileWriter,后缀名是父类名,前缀名是该流对象的功能。

    创建一个FileWriter对象,该对象一被初始化就必须要有被操作的文件。而且该文件会被创建到指定的目录下。如果该目录下已有同名文件,将被覆盖。

FileWriter fw = new FileWriter(“F:\\test.txt”);

构造方法需要捕捉异IO异常。

    调用write方法,将字符串写入流中。

fw.writer(“asdfdsasfdsa”);

    刷新流对象中的缓冲中的数据,将数据写到目的地中。

fw.flush();

fw.close();

关闭流资源,关闭之前会刷新一次内部的缓冲中的数据。将数据刷到目的地中。和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。

 

IO异常的处理方式

         FileWriterfw = null;

         try{               

                fw = newFileWriter("D:\\aaa.txt");             

                fw.write("aaaadfsda");         

                fw.flush();

         }catch(IOExceptione){                

                System.out.println(e.toString());

         }finally{                 

                try{

                       if(fw!=null)

                              fw.close();

                }catch(IOException e){

                       System.out.println(e.toString());

                }

              }

 

已有文件内容的续写

FileWriter的构造方法中,加入true参数代表不覆盖已有的文件,并在已有文件的末尾处进行数据的续写。

\r\n

 

字符流:写入流Reader

FileReader子类,实例化时需指定要读取的文件。

第一种方式:通过字符读取

    创建一个文件读取的流对象,和指定名称的文件相关联。要保证该文件是已经存在的,如果不存,会发生异常:FileNotFoundException

FileReader fr = new FileReader(“D:\\test.txt”);

    调用读取流对象的read方法。

数据类型   变量名=fr.read();

read():一次只读一个字符,而且会自动往下读。如果已到达流的末尾,则返回-1

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

  System.out.println(ch);

}

       第二种方式:通过字符数组进行读取

    定义一个字符数组,用于存储读到字符。该read(char[])返回的是读到字符个数。

FileReader fr = new FileReader(“D:\\test.txt”);

char[] ch = new char[3];

int num=0;

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

System.out.println(newString(ch,0,num));

}

fr.close();

 

复制文本文件,从C盘拷贝至D盘。

    D盘创建一个文件,用于存储C盘文件中的数据。

    定义读取流和C盘文件关联。

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

    关闭资源

FileReader fr = new FileReader("D:\\aa.txt");
  FileWriter fw = new FileWriter("D:\\tmp\\aa_copy.txt");
  
  char[] ch = new char[1024];
  int num=0;
  while((num = fr.read(ch))!=-1){
   
   fw.write(ch,0,num);
   fw.flush();
  }
  
  fw.close();
  fr.close();

你可能感兴趣的:(IO:字符流、字节流)