黑马程序员_IO流学习总结

Posted on 2013-03-17 13:37  我是王琦  阅读(226)  评论(0)    收藏  举报


流的概念:

在面向对象的语言中,数据的输入和输出都是通过流来实现的。数据流是一种有顺序、有起点和终点的字符集合。
流的分类: 
按照数据流的流向划分可以分为输入流和输出流。
  输入流:可以对数据进行读取操作的类称为输入流,输入流都继承自抽象类InputStream 
  输出流:一个能过将字节流传送出去的类被称为输出流,所有的输入流都继承自抽象类OutStream 
按照数据流的操作数据的单位分类可以分为字节流和字符流。 
  字符流:字符流对数据的操作一字符为单位,只能操作文本数据。
  字节流:字节流对数据的操作以一个字节(8bit)为一个单位进行处理,因为所有文件在计算机中被转换为2进制,所以字节流可以操作所有数据。
  注意:仅当操作纯文本数据是选用字符流进行操作,其他媒体数据一律选用字节流。
流的层次关系:
字节流常用类
InputStream 这是一个抽象类,表示所有字节输入流的超类 
  FileInputStream 用于读取诸如图像数据之类的原始字节流
  BufferedInputStream 字节输入流缓冲区,能对字节输入流的功能进行增强 
OutPutStream 这是一个抽象类,表示所有字节输入流的超类
  FileOutputStream 用于写入诸如图像数据之类的原始字节流
  BufferedOutStream 字节输出流缓冲区 
字符流常用类
Reader 用于读取字符流的抽象类
  FileReader 用于读取文本文件的便捷类
  BufferedReader 用于读取文本的缓冲区,能对Reader功能进行增强
  InputStreamReader 是字节流通向字符流的桥梁:能够将字节流转换为字符流
Writer 用于写入字符流的抽象类
  FileWriter 用于写入文本文件的便捷类
  BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
  OutStreamWriter  是字符流通向字节流的桥梁:
流操作规律:

1,明确源和目的。
 源:输入流。InputStream  Reader
 目的:输出流。OutputStream  Writer。
2,操作的数据是否是纯文本。
 是:字符流。
 不是:字节流。

3,当体系明确后,在明确要使用哪个具体的对象。
 通过设备来进行区分:
 源设备:内存,硬盘。键盘
 目的设备:内存,硬盘,控制台。


流的使用
字符流示例:拷贝一个字符文件
 1 import java.io.*;
 2 class CopyTxt
 3 {
 4     public static void main(String[] args) throws Exception
 5     {
 6         //定义文件读取流对象,并指定要拷贝的文本文件
 7         FileReader fr=new FileReader("\\java\\CopyTxt.java");
 8         //定义文件写入流对象,并指定文件保存的位置
 9         FileWriter fw=new FileWriter("C:\\CopyTxt.java");
10         //定义读取流缓冲区对象,传入fr以便跟好的操作数据。
11         BufferedReader bufr=new BufferedReader(fr);
12         String line=null;
13         while((line=bufr.readLine())!=null)
14         {
15             fw.write(line+"\r\n");//读取一行就写入一行数据。
16         }
17         bufr.close();//关闭读取流
18         fw.close();//关闭写入流
19     }
20 
21 }

字节流示例:从E:\\KuGou路径拷贝一个音乐文件,到C盘根目录。

 1 import java.io.*;
 2 class CopyMp3
 3 {
 4     public static void main(String[] args) throws Exception
 5     {
 6         //定义文件读取流对象,并指定要拷贝的Mp3文件
 7         FileInputStream fis=new FileInputStream("E:\\KuGou\\刘德华 - 冰雨.mp3");
 8         //定义文件写入流对象,并指定文件保存的位置
 9         FileOutputStream fos=new FileOutputStream("C:\\刘德华 - 冰雨.mp3");
10         //定义读取流缓冲区对象,传入fis以便跟好的操作数据。
11         BufferedInputStream bufs=new BufferedInputStream(fis);
12         byte[] buf=new byte[1024];
13         int len=0;
14         while((len=bufs.read(buf))!=-1)
15         {
16             fos.write(buf,0,len);
17         }
18         bufs.close();//关闭读取流
19         fos.close();//关闭写入流
20     }
21 
22 }

键盘录入:将键盘录入的文本存入到指定文件中

 1 import java.io.*;
 2 class KeyBoarding
 3 {
 4     public static void main(String[] args) throws Exception
 5     {
 6         //获取键盘录入
 7         BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
 8         //定义文件写入流,指定文件存放路径。定义文件写入流
 9         FileWriter fw=new FileWriter("C:\\KeyBoarding.txt");
10         String line=null;
11         while((line=bufr.readLine())!=null)//
12         {
13             fw.write(line+"\r\n");//如果读取一行数据不为空就写入输入流。
14             if(line.equals("over"))
15                 break;
16             fw.flush();//刷新输入流
17         }
18         bufr.close();//关闭输出流缓冲区。
19 
20 
21     }
22 
23 }

 

 



博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3