java_8_文件

第九章 输入输出流及其文件处理 本章提要 输入输出处理及流(stream)的概念 标准设备输入输出流对象 流类的分类 输入流、输出流 字节流、字符流 过虑流 流与文件处理;9.1 流(stream)的概念 你已经看到,在JAVA中,所有的事情都是依靠类或对象来完成的。 那么,程序的输入输出处理,当然也离不开与其相关的类和对象。 在这里,有一个概念需要重申:任何类型的数据,无论存储在内存 还是文件中,它们最终都是以字节序列的形式被存放在那里的。 在JAVA中,能被程序读取一个字节序列的对象被称为“输入流对象” (InputStream) ,而能写入一个字节序列的对象被称为“输出流对象” (OutputStream) 。 进而,JAVA将那些能被程序直接从设备或文件中读写字节的对象称 为“源点流对象”。另外,还有一种流对象,它们只能从“源点流对象”中 读取字节,但却可以将读到的那些字节重新“合成”为你所期望的各种数 据类型,这种对象被称为“加工流对象”。如下所示: ; 在JAVA中,某个“流”(stream)就是某个流类的对象。实际上,你 可以将某个“流”看成是数据通道中的某段“管道”。而这些管道需要你来 一个接一个地将它们“连接”起来,以形成一个从文件到程序或从程序到 文件的数据“通道”。 流的设计者们使用了一种非常聪明的机制来把各种功能分开:他们 将输入输出过程中可能用到的各种功能都分别封装成了一个个不同的流 类,每个流类只完成一种功能,并且这些“流”的功能从不重叠。 在java.io包中,存放了所有与输入输出有关的流类。; 其中有些流,只有“连接”到文件或设备上才能工作——“源点流”。 而另一些却只能被“连接”到“源点流”上才能工作——“加工流”。为此, 流的设计者们精心设计了60多种流类。 流的设计者在每种“输入流”中都设计了用于从其中读取数据的方法 (如,read等);也在每种“输出流”中设计了用于向其中写入数据的方 法(如,writer等)。; ;9.2 标准设备输入输出流对象 9.2.1 标准输入流对象 在大多数情况下,标准输入设备就是键盘。因此,“标准输入流” 对象就代表了键盘。在JAVA中,它的对象名为: System.in 它是类System中的一个静态成员。因此,你不用创建该对象,就可以直 接使用它。显然,它是一个“源点流”(直接与键盘相“连接”)。 该对象有一个方法read(),可用于每次从键盘读入一个字符,并 返回该字符的int类型的值。例如, int a=System.in.read(); 或 char ch=(char)System.in.read();; 如果你想顺利地读入一个字符(char类型的值),那么,你还需要创建另 一个输入流(加工流)对象。该对象的类名是: InputStreamReader 例如,创建其对象的语句: InputStreamReader charin= new InputStreamReader( System.in ); 其实这就是将“加工流”(charin)连接到“源点流”(System.in)上 。 因为该流中也有一个read方法,可以每次从System.in中读入一个字符的 int值,然后将它转换为char类型并返回该char值。 例如, char ch=charin.read();; 你一定会觉得上面的创建语句很特别。其实,这就是在连接两个管 道(即连接两个输入流对象)。 然而,象InputStreamReader这样的输入流,却只能用来读入由另一 个输入流读入的数据。如上所见,它的作用仅仅是将由System.in读入的 int类型的字符转换成char 类型——“加工流”。 因此,在创建它时,你必须用另外一个已存在的输入流对象作为其 初始化参数——将加工流InputStreamReader对象连接到源点流对象 System.in 的后面——得到一个新的输入流。即,如下语句: InputStreamReader charin= new InputStreamReader( System.in ); 在后面的介绍中,你将会知道,InputStreamReader其实是一个“能 将字节流转换成字符流”的“加工流”。; 不幸的是, InputStreamReader却只能读入一个字符。若你想要读入 一行字符,那么,你还得需要再创建另外一个类名叫做BufferedRea

文档评论(0)

1亿VIP精品文档

相关文档