浅谈我对IO流的了解 - 字符流

来源:互联网 发布:6080软件下载 编辑:程序博客网 时间:2024/04/27 03:50


Java.io 包,该包介绍:通过数据流、序列化和文件系统提供系统输入和输出


下面了解下什么是IO流  ?

  • IO流是用来处理设备之间的数据传输。
  • JAVA对数据的操作是通过流的方式
  • 流分为输入流和输出流
  • 流按操作数据分为字节流和字符流

-------------------------------------------------------------------------------------------------------------------------------------

下面介绍字符流类, 已知字符流的基类是  Reader , Writer 

已知子类:

       BufferedReader    --------        缓冲流         --------      BufferedWriter

    CharArrayReader    --------    字符数组流      --------      CharArrayWriter

             FilterReader    --------      过滤器流        --------      FileterWriter

InputStreamReader    --------        转换流         --------      InpuStreamWriter

            PipedReader    --------       管道流          --------      PipedWriter

            StringReader    --------     字符串流  --------      StringWriter

                FileReader    --------       文件流          --------      FileWriter

-------------------------------------------------------------------------------------------------------------------------------------


下面通过 FileReader 文件流进行文件的读取演示:

import java.io.*;class ReaderWriter{/* 已知当前文件下,有一个test文本文件,通过FileWriter 文件字符流进行写入 */public static void main(String[] args) throws IOException {/*1. 使用 IO 流 会引发一个JAVA异常体系中的,比较常见的异常IOException需要进行捕获 (这里先不处理,抛出去)2. 在创建FileReader 对象, 需要绑定一个文件对象,该文件不存在则会引发 java.io.FileNotFoundException (系统找不到指定的文件。) */FileReader fr = new FileReader("11.txt");char[] buf = new char[1024];     //定义一个字符缓冲区,int len = 0; //用于记录文件长度while((len = fr.read(buf))!=-1)  //通过 read 读取数据,将读取到的数据存入到字符缓冲区,{         //读取完后的read会返回剩余的文件长度,用len记录著,用于判断文件是否读取完毕。System.out.println(new String(buf, 0, len));  //打印每一次存储到的数据。}fr.close();  //因为FileReader底层是调用window资源,所以需要通过close方法,释放资源。因为资源是有限的,}}



下面通过 FileWriter 文件流进行文件的写入演示:

import java.io.*;class ReaderWriter{/* 已知当前文件下,有一个test文本文件,通过FileWriter 文件字符流进行写入 */public static void main(String[] args) throws IOException {/*1. 使用 IO 流 会引发一个JAVA异常体系中的,比较常见的异常IOException,需要进行捕获(这里先不处理,抛出去)2. 在创建FileWriter 对象,需要绑定一个文件对象,该文件不存在则会当前文件路径下,创建文件对象,如何存在,则会覆盖当前文件对象,3. 可以通过创建FileWriter,告诉它不用覆盖,你要续写文件 例: new FileWriter("test", true);*/FileWriter fw = new FileWriter("test.txt");for(int i = 1; i<6; i++){fw.write("第"+i+"写入数据\r\n"); //通过 write 方法写入数据,需要注意的是:他写入的数据是在缓冲区里,并不是目的文件内。fw.flush();                     //需要通过 flush 方法进行刷新缓冲区,这样数据才百分百的写入到目的文件内。}/*这里需要注意是close方法底层也在调用flush方法,这让人产生错意,反正close最后都会调用flush方法,所以干脆不用我写 flush方法了。 这点是错误的。因为flush是即时刷新,可以保证数据的有效性,要是在写入的过程中,停电了,该程序没有执行到close方法就断电了,之前的写入的数据就会没有了。所以这里建议,写一次,刷新一次。*/fw.close();  //因为FileWriter底层是调用window资源,所以需要通过close方法,释放资源。因为资源是有限的,}}

使用 IO 流 会引发一个JAVA异常体系中的,比较常见的异常 IOException 

下面演示常见的 IO流 异常处理方式:

import java.io.*;class ReaderWriter{/*对于IO流的捕获处理,我们需要对他们分开进行try...catch处理。每一种的异常都方式都是不一样的。1. 对文件对象的处理2. 对读写数据的处理3. 对文件对象关闭资源处理。*/public static void main(String[] args) {write();read();}public static void read(){/* 下面演示读取字符流的捕获异常处理 */FileReader fr = null;try{fr = new FileReader("test.txt");}catch(FileNotFoundException e) { throw new RuntimeException("文件不存在!"); }char[] buf = new char[1024];int len    = 0;try{while((len = fr.read(buf))!=-1){System.out.println(new String(buf, 0, len));}}catch(IOException e) { throw new RuntimeException("文件读取错误!"); }finally{try{if(fr!=null)fr.close();}catch(IOException e) { throw new RuntimeException("文件读取流关闭失败!"); }}}public static void write(){/* 下面演示写入字符流的捕获异常处理 */FileWriter fw = null;try{fw = new FileWriter("test.txt", true);}catch(IOException e) { throw new RuntimeException("路径错误!"); }try{fw.write("写入数据");fw.flush();}catch(IOException e) { throw new RuntimeException("数据写入错误!"); }finally{try{if(fw!=null)fw.close();}catch(IOException e) { throw new RuntimeException("文件写入流关闭失败!"); }}}}



0 0
原创粉丝点击