第14章 java io机制文件

上传人:第*** 文档编号:33589362 上传时间:2018-02-16 格式:DOC 页数:14 大小:250KB
返回 下载 相关 举报
第14章 java io机制文件_第1页
第1页 / 共14页
第14章 java io机制文件_第2页
第2页 / 共14页
第14章 java io机制文件_第3页
第3页 / 共14页
第14章 java io机制文件_第4页
第4页 / 共14页
第14章 java io机制文件_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《第14章 java io机制文件》由会员分享,可在线阅读,更多相关《第14章 java io机制文件(14页珍藏版)》请在金锄头文库上搜索。

1、第 14 章 java IO 机制文件本模块讨论文件,socket 和其他数据源使用的流式 I/O 机制。第一节 相关问题讨论 以下为与本模块内容有关的问题: Java 编程语言中使用什么机制来读写文件?第二节 目 标在完成了本模块的学习后,你应当能够: 描述和使用 java.io 包的流式思想 构造文件和过滤器流,并恰当地使用它们 区别流与读者和作者,并进行合适的选择 考察并操作文件和目录 读、写和更新文本和数据文件 使用 Serialization 接口来保持对象的状态第三节 流式 I/O本模块考察了 Java 编程语言如何使用流来处理字节和字符 I/O(包括 stdio,stdout 和

2、stderr)。下面几节将考察有关处理文件和操作它们所包含的数据的特定细节。14.3.1 流的基础知识一个流是字节的源或目的。次序是有意义的。例如,一个需要键盘输入的程序可以用流来做到这一点。两种基本的流是:输入流和输出流。你可以从输入流读,但你不能对它写。要从输入流读取字节,必须有一个与这个流相关联的字符源。在 java.io 包中,有一些流是结点流,即它们可以从一个特定的地方读写,例如磁盘或者一块内存。其他流称作过滤器。一个过滤器输入流是用一个到已存在的输入流的连接创建的。此后,当你试图从过滤输入流对象读时,它向你提供来自另一个输入流对象的字符。14.3.2 InputStream 方法流

3、式 I/O 流是字节的源或目的。 两种基本的流是: 输入流 输出流 结点流对特定的地方读写 过滤流使用结点流作为输入或输出InputStream 方法 三个基本的 read()方法 int read() int read(byte ) int read(byte, int ,int ) 其他方法 void close() int available() skip(long) boolean markSupported() void mark(int) void reset(int) int read() int read(byte ) int read(byte, int ,int )这三个方

4、法提供对输入管道数据的存取。简单读方法返回一个 int 值,它包含从流里读出的一个字节或者-1,其中后者表明文件结束。其它两种方法将数据读入到字节数组中,并返回所读的字节数。第三个方法中的两个 int 参数指定了所要填入的数组的子范围。注考虑到效率,总是在实际最大的块中读取数据。void close()你完成流操作之后,就关闭这个流。如果你有一个流所组成的栈,使用过滤器流,就关闭栈顶部的流。这个关闭操作会关闭其余的流。int available()这个方法报告立刻可以从流中读取的字节数。在这个调用之后的实际读操作可能返回更多的字节数。skip(long)这个方法丢弃了流中指定数目的字符。boo

5、lean markSupported()void mark(int)void reset()如果流支持“回放”操作,则这些方法可以用来完成这个操作。如果 mark()和 reset()方法可以在特定的流上操作,则 markSupported()方法将返回 ture。mark(int)方法用来指明应当标记流的当前点和分配一个足够大的缓冲区,它最少可以容纳参数所指定数量的字符。在随后的 read()操作完成之后,调用 reset()方法来返回你标记的输入点。14.3.3 OutputStream 方法OutputStream 方法 三个基本的 write()方法 int write() int w

6、rite(byte ) int write(byte, int ,int ) 其他方法 void close() void flush() void write(int) void write(byte ) void write(byte , int, int)这些方法写输出流。和输入一样,总是尝试以实际最大的块进行写操作。void close()当你完成写操作后,就关闭输出流。如果你有一个流所组成的栈,就关闭栈顶部的流。这个关闭操作会关闭其余的流。void flush()有时一个输出流在积累了若干次之后才进行真正的写操作。flush()方法允许你强制执行写操作。第四节 基本的流类在 java

7、.io 包中定义了一些流类。下图表明了包中的类层次。一些更公共的类将在后面介绍。基本的流类 FileInputStream 和 FileOutputStream BufferInputStream 和 BufferOutputStream DataInputStream 和 DataOutputStream PipedInputStream 和 PipedOutputStream14.4.1 FileInputStream 和 FileOutputStream这些类是结点流,而且正如这个名字所暗示的那样,它们使用磁盘文件。这些类的构造函数允许你指定它们所连接的文件。要构造一个 FileInpu

8、tStream,所关联的文件必须存在而且是可读的。如果你要构造一个 FileOutputStream 而输出文件已经存在,则它将被覆盖。FileInputStream infile =new FileInputStream(myfile.dat);FileOutputStream outfile =new FileOutputStream(results.dat);14.4.2 BufferInputStream 和 BufferOutputStream这些是过滤器流,它们可以提高 I/O 操作的效率。14.4.3 DataInputStream 和 DataOutputStream这些过滤器

9、通过流来读写 Java 基本类。例如:DataInputStream 方法byte readByte()long readLong()double readDouble()DataOutputStream 方法void writeByte(byte)void writeLong(long)void writeDouble(double)注意 DataInputStream 和 DataOutputStream 的方法是成对的。这些流都有读写字符串的方法,但不应当使用这些方法。它们已经被后面所讨论的读者和作者所取代。14.4.4 PipedInputStream 和 PipedOutputStr

10、eam管道流用来在线程间进行通信。一个线程的 PipedInputStream 对象从另一个线程的PipedOutputStream 对象读取输入。要使管道流有用,必须有一个输入方和一个输出方。第五节 URL 输入流除了基本的文件访问之外,Java 技术提供了使用统一资源定位器 (URL)来访问网络上的文件。当你使用 Applet 的 getDocumentBase()方法来访问声音和图象时,你已经隐含地使用了 URL 对象。String imageFile = new String (images/Duke/T1.gif);images0 = getImage(getDocumentBase

11、(), imageFile);然而,你必须象下面的程序那样提供一个直接的 URL.URL imageSource;try imageSource = new URL(http:/ catch ( MalformedURLException e) images0 = getImage(imageSource, Duke/T1.gif);14.5.1 打开一个输入流你可以通过存储文档基目录下的一个数据文件来打开一个合适的 URL 输入流。1.InputStream is = null;2.String datafile = new String(Data/data.1-96); 3.byte bu

12、ffer = new byte24; 4.try 5./ new URL throws a MalformedURLException 6./ URL.openStream() throws an IOException 7.is = (new URL(getDocumentBase(),datafile).openStream(); 8. catch (Exception e) 现在,你可以就象使用 FileInputStream 对象那样来用 it 来读取信息:1.try 2.is.read(buffer, 0, buffer.length); 3. catch (IOException

13、e1) 警告记住大多数用户进行了浏览器的安全设置,以防止 Applet 存取文件。URL 输入流.URL imageSource;try imageSource = new URL(http:/ catch ( MalformedURLException e) images0 = getImage(imageSource, Duke/T1.gif);第六节 读者和作者14.6.1 UnicodeJava 技术使用 Unicode 来表示字符串和字符,而且它提供了 16 位版本的流,以便用类似的方法来处理字符。这些 16 位版本的流称为读者和作者。和流一样,它们都在 java.io包中。读者和作

14、者中最重要的版本是 InputStreamReader 和 OutputStreamWriter。这些类用来作为字节流与读者和作者之间的接口。当你构造一个 InputStreamReader 或 OutputStreamWriter 时,转换规则定义了 16 位Unicode 和其它平台的特定表示之间的转换。14.6.2 字节和字符转换缺省情况下,如果你构造了一个连接到流的读者和作者,那么转换规则会在使用缺省平台所定义的字节编码和 Unicode 之间切换。在英语国家中,所使用的字节编码是: ISO 8859-1。你可以使用所支持的另一种编码形式来指定其它的字节编码。在 native2asci

15、i 工具中,你可以找到一个关于所支持的编码形式的列表。使用转换模式,Java 技术能够获得本地平台字符集的全部灵活性,同时由于内部使用Unicode,所以还能保持平台独立性。14.6.3 缓冲读者和作者因为在各种格式之间进行转换和其它 I/O 操作很类似,所以在处理大块数据时效率最高。在 InputStreamReader 和 OutputStreamWriter 的结尾链接一个 BufferedReader 和BufferedWriter 是一个好主意。记住对 BufferedWriter 使用 flush()方法。14.6.4 读入字符串输入下面这个例子说明了从控制台标准输入读取字符串所应当使用的一个技术。1.import java.io.*;2.public class CharInput 3.public static void main (String args) throws 4.java.io.IOException 5.String s; 6.InputStreamReader ir; 7.BufferedReader in; 8.ir = new InputStreamReader(System.in); 9.in = new BufferedReader(ir); 10.11.while (s = in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号