1.  数据源(Data Source):是指那些能够提供数据的地方,包括键盘、磁盘文件、网络接口等。

数据宿(Data Sink):指能够接收数据的地方,可以是磁盘文件、网络接口以及显示器、打印机等外部设备。(数据宿也可认为是数据传输的目的地)

在国内业界,人们一般不对这两者进行仔细区分,而是统称为“数据源”

数据流:考虑到数据源的多样性,为了更有效地进行数据的输入、输出操作,Java中把不同的数据源与程序之间的数据传输都抽象表述为“流”(stream),以实现相对统一和简单的输入/输出操作方式。传输中的数据就像流水一样,也称为数据流。

2. I/O数据流的分类方式

µ   按照数据流动的方向,可分为输入流(InputStream)和输出流(Output Stream)

ü     输入流只能从中读取数据,而不能向其写出数据;

ü     输出流则只能向其写出数据,而不能从中读取数据。

    这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之“输入”数据,将程序中的数据传送到外部谓之“输出”数据。(这里说的读写,是指程序从外读或或向外写,所以觉得与平时说的别扭,猛一看,以为是错的,其实相反对着呢!)

3.  根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)

ü     节点流可以从/向一个特定的地方读/写数据。(“地方”就是数据源,如键盘或磁盘文件等。即节点流是直接连接到数据源的I/O流)

例,FileReader fr=newFileReader(“demo.txt”);

ü     处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连接到数据源。

例,BufferedReaderbr=new BufferedReader(new FileReader(“demo.txt”));

4.  按传输数据的“颗粒大小”划分,可分为字符流(Character Stream)和字节流(Byte Stream)

ü     字节流以字节为单位进行数据传输,每次传送一个或多个字节;

ü     字符流以字符为单位进行数据传输,每次传送一个或多个字符;(字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,将查到的字符返回)

ü     字节流可以处理所有类型的数据,如图片、mp3、avi

ü     字符流只能处理字符数据。

结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流

5. 输入/输出流体系

  用于实现I/O操作的流类和接口在java.io包中。

                                                               

 

        

Object

 

InputStream

 

OutputStream

 

Reader

 

Writer

 

File

 

RandomAccessFile

注意:Java采用的命名惯例有助于我们区分字节流类型和字符流类型:凡是以InputStream或OutputStream结尾的类型均为字节流,凡是以Reader或Writer结尾的均为字符流。(IO体系中的子类名后缀都是父类名称,而前缀都是体现子类功能的名字)

6.标准输入输出是指在字符方式下(如DOS)程序与系统进行交互的方式。主要分为三种:

标准的输入,对象是键盘;

标准的输出,对象是显示器屏幕;

标准的错误输出,对象是显示器屏幕;

Java通过系统类System实现标准的输入输出功能。System类在java.lang包中,声明为一个final类。

public final class System extends Object

System类不能创建对象,而是要直接使用,其中有三个成员,分别是in、out、err。

Public static final InputStream in。

7. System.in作为输入流InputStream的对象,实现标准的输入,使用期read()方法从键盘接受数据。

System.out是打印流类PrintStream的对象,用来实现标准输出,其中有print()和println()方法,支持java中任意基本类型。

System.err与System.out相同,以PrintStream类的对象err实现标准的错误输出。

8.  java提供了两个接口——FileFilter和FilenameFilter,用来实现对文件名字字符串的过滤。FileFilter接口用于抽象路径名的过滤器;FilenameFinter接口的实现类可用于过滤文件名。这两个接口都有accept()方法。FileFiler的accept(Filepathname)测试指定抽象路径名是否应该包含在某个路径名列表中;FilenameFilter中的accept(Filr dir,Stringname)测试指定文件是否应该包含在某一文件列表中。

显示清单时使用过滤器。

使用File类的list()方法和listFile()方法显示文件清单时,可以设置一个文件过滤器作为参数。

publicString[] list(FilenameFilter filter)

public File[]listFiles(FilenameFilter filter)


 

public File[]listFiles(FilenameFilter filter)

当调用list()方法或listFile()方法时,原始清单中的每个项目都将调用accept()方法。如果accept()方法返回true,则相应的项目就留在清单内。