java的常用I/O流~~

来源:互联网 发布:京东自营是正品吗 知乎 编辑:程序博客网 时间:2024/05/21 08:11


java中的I/O流操作是一个重点,但是关于流的类非常之多,看的人头晕眼花,在加上什么时候输入,什么时候输出,完了,彻底崩溃了。

 

其实当遇到比较复杂的问题的时候,最重要的是理清思路,像剥茧抽丝一样,进行归纳总结就会发现事情并不像想象的那么复杂

 

从整体来看,流无非就是输入与输出

 

打开API文档

 

输入有两个类:InputStream 

                            Reader

共同点:任何自InputStream或Reader派生而来的类都含有名为read()的基本方法

区别:InputStream是读取字节流, Reader是读取字符流

            InputStream的read()方法是用于读取单个字节或字节数组

            Reader的read()方法是用于读取单个字符或字符数组

 

输出有两个类:OutputStream

                            Writer

共同点:任何自OutputStream或Writer派生而来的类都含有名为write()的基本方法

区别:OutputStream是写字节流, Writer是写字符流

            OutputStream的write()方法是用于读取单个字节或字节数组

            Writer的write()方法是用于读取单个字符或字符数组

 

另一个让人困惑的就是,什么是读?什么是写?

简单的说

读就是从内存中把数据读出来

写就是把数据写进内存中去

 

这么简单,但为什么“流”类库让你迷惑呢?

因为创建单一的结果流,却需要创建多个对象。

 

下面举几个常用的I/O流的例子

文本文件的复制

方法一

  1.         FileReader fr = new FileReader("a.txt");//要复制的文本文件
  2.         BufferedReader br = new BufferedReader(fr);//用读字符流缓冲区套住
  3.         FileWriter fw = new FileWriter("b.txt");//副本文件
  4.         BufferedWriter bw = new BufferedWriter(fw);//用写字符流缓冲区套住
  5.         while(true) {
  6.             String temp = br.readLine();
  7.             if(temp == null) {
  8.                 break;
  9.             }
  10.             bw.write(temp);
  11.             bw.newLine();
  12.         }
  13.         
  14.         bw.close();
  15.         fw.close();
  16.         br.close();
  17.         fr.close();

方法二

  1.         BufferedReader br = new BufferedReader(
  2.                 new InputStreamReader(new FileInputStream("a.txt")));
  3.         PrintWriter pw = new PrintWriter(new FileOutputStream("b.txt"));
  4.         while(true) {
  5.             String temp = br.readLine();
  6.             if(temp == null) {
  7.                 break;
  8.             }
  9.             pw.println(temp);
  10.         }
  11.         
  12.         pw.close();
  13.         br.close();

方法三

  1.     InputStream in = new FileInputStream("a.txt");
  2.         
  3.         OutputStream out = new FileOutputStream("b.txt");
  4.         
  5.         byte[] bytes = new byte[1024];
  6.         while(true) {
  7.             int len = in.read(bytes);
  8.             if(len == -1){
  9.                 break;
  10.             }
  11.             out.write(bytes, 0, len);
  12.         }

这种方法不但可以复制文本文件还可以复制分文本的其他文件

因为非文本文件是通过字节流传输的

原创粉丝点击