A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gaoming971366 中级黑马   /  2015-7-15 12:17  /  465 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java当中的IO流程属于重点中的一部分,下面我为大家分析一下IO流。
首先什么是io流,我不说课本上的了,做个形象的比喻就类似于水流 ,文件------程序,在文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向,双向的,既可以流进,也可以流出。便于理解,可以把流就是一个管道里面有流水,这个管道连接了文件和程序。
接下来在讲一下分类吧。流都在java.io包中,按输入输出的话可以分为输入流InputStream,输出流OutputStream;根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。下面将详细说明一下:
①JAVA字节流
a.FileInputStream文件输入流和FileOutputStream文件输出流
这两个类属于结点流,第一个类的源和第二个类的目的都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。如:
FileInputStream infile = new FileInputStream("myfile.dat");
FileOutputStream outfile = new FileOutputStream("results.dat");
值得注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。
b.BufferedInputStream和BufferedOutputStream
它们是过滤器流,其作用是提高输入输出的效率。
c.DataInputStream和DataOutputStream
这两个类创建的对象分别被称为数据输入流和数据输出流,用的也很多,这些以后再给大家讲解,今天先说基础。
②Java的字符流
字符流主要是用来处理字符的,对应的字符流按输入和输出分别称为readers和writers。
a.InputStreamReader和OutputStreamWriter
在构造这两个类对应的流时,它们会自动进行转换。
b.BufferedReader和BufferedWriter
这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理,这2个流是转换流。
值得注意的是Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。

结合开始所说的输入/输出流,字符流/字节流出现了个一小框架。
                     字节流            字符流
输入流        InputStream             Reader
输出流        OutputStream            Writer
最好下面给大家展示一下,IO流常用的代码吧,实现了文件的读取,打印在另一个文件实现了复制功能:
import java.io.*;
public class TextRead{

public static void main(String[] args){
    File fi,fo;  //建立file文件对象
    BufferedReader bf = null;
    PrintWriter pw = null;//建立一个打印流,不懂的话就认识为是print
        //做IO不try就throws,基础你懂得
    try{
        //文件的路径以及名称,如果没有会自动创建。
     fi = new File("F:\test.txt");
     fo = new File("copyzzc.txt");
     bf = new BufferedReader(new FileReader(fi));
     pw = new PrintWriter(fo);
        //运用读取多行readLine方法,read方法每次读取一行,可用循环都读取出来
     String line = bf.readLine();
     while(line!=null){
     pw.println(line);
      line = bf.readLine();
     }
    }catch(Exception e){
     e.printStackTrace();
    }finally{
     try{
     //关闭 文件。
      if(bf!=null){
       bf.close();
       bf = null;
      }
      if(pw!=null){
       pw.close();
       pw = null;
      }
     }catch(Exception e){
      e.printStackTrace();
     }
    }
}
}

4 个回复

正序浏览
顶一下三楼
回复 使用道具 举报
yihuihua 发表于 2015-7-15 13:40
line = bf.readLine();
不太明白为啥要再要在循环里写这句,麻烦大神指点一下

readLine()每次只是读一行。若是没有while的话,读一行就不会往下读了。
while里写line = bf.readLine();只要满足条件就ReadLine,可以将文件中信息逐行读完。
回复 使用道具 举报
不错,赞一个。
回复 使用道具 举报
line = bf.readLine();
不太明白为啥要再要在循环里写这句,麻烦大神指点一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马