Java高级IO流(16页).doc
《Java高级IO流(16页).doc》由会员分享,可在线阅读,更多相关《Java高级IO流(16页).doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-Java高级IO流-第 16 页模块十五 高级I/O流模块十五 高级I/O流11. I/O基础知识22. 字节流(InputStream)22.1. InputStream的方法22.2. OutputStream方法33. 字符流33.1. Reader方法33.2. Writer方法44. 节点流45. A Reader/Writer Example46. A Buffered Reader/Writer Example57. I/O流的链68. 过程流69. 基本字节流类79.1. FileInputStream和FileOutputStream79.2. BufferInputStr
2、eam和BufferOutputStream79.3. PipedInputStream和PipedOutputStream89.4. DataInputStream和DataOutputStream810. 基本字符流类810.1. InputStreamReader 和 OutputStreamWriter910.2. 缓冲读者和作者910.3. 读入字符串输入910.4. 使用其它字符转换1011. URL输入流1011.1. 打开一个URL输入流1012. 随机文件1112.1. 创建一个随机存取文件1112.2. 存取信息1112.3. 添加信息1113. 第十节 串行化1213.1
3、. 对象图1213.2. 读写一个对象流1214. 练习:熟悉I/O1414.1. 打开文件1414.2. 创建一个简单的数据库程序1414.3. 使用保持1414.4. 检查一下你的进度14本模块讨论Java语言是怎样通过流来操纵字节、字符和对象I/O的。此外,本模块还要讨论节点流。在完成了本模块的学习后,你应当能够:l 描述和使用java.io包的流式思想l 构造文件和过程流,并恰当地使用它们l 区别字节流与字符流,并进行合适的选择l 考察并操作文件和目录l 读、写和更新文本和数据文件l 使用Serialization接口来编码对象的状态1. I/O基础知识在Java语言中数据流是发送或接
4、收数据的管道。通常,你的程序是流的一个端点,其它程序或文件是流的另一个端点。源端点和目的端点分别叫做input stream(输入流)和output stream(输出流)。你可以从输入流读,但你不能对它写;同样,你可以向输出流写,但不能从输出流读。图15-1 数据流分类byte streamcharacter streamsSource streamsInputStreamReaderSink streamOutputStreamWriter如图15-1所示:Java技术支持两种数据类型的流:InputStream和OutputStream:字节流。其它字节流都是InputStream或Ou
5、tputStream的子类。Reader和 Writer:字符流。其它字符流都是Reader或Writer的子类。2. 字节流(InputStream)2.1. InputStream的方法InputStream有三个方法访问它的数据:l int read():简单读方法返回一个int值,它是从流里读出的一个字节。如果遇到文件结束则返回-1。l intread(byte ):将数据读入到字节数组中,并返回所读的字节数。l int read(byte, int offset,int length) 将数据读入到字节数组中,并返回所读的字节数。Offset是数组的偏移量,length是读取的长度。
6、void close()你完成流操作之后,就关闭这个流。如果你有一个流所组成的栈,使用过滤器流,就关闭栈顶部的流。这个关闭操作会关闭其余的流。int available()这个方法报告立刻可以从流中读取的字节数。在这个调用之后的实际读操作可能返回更多的字节数。skip(long)这个方法丢弃了流中指定数目的字符。boolean markSupported()void mark(int)void reset()如果流支持“回放”操作,则这些方法可以用来完成这个操作。如果mark()和reset()方法可以在特定的流上操作,则markSupported()方法将返回ture。mark(int)方法
7、用来指明应当标记流的当前点和分配一个足够大的缓冲区,它最少可以容纳参数所指定数量的字节。在随后的read()操作完成之后,调用reset()方法来返回你标记的输入点。2.2. OutputStream方法void write(int )void write(byte )void write(byte , int, int)这些方法写输出流。和输入一样,总是尝试以实际最大的块进行写操作。void close()当你完成写操作后,就关闭输出流。如果你有一个流所组成的栈,就关闭栈顶部的流。这个关闭操作会关闭其余的流。void flush()有时一个输出流在积累了若干次之后才进行真正的写操作。flus
8、h()方法允许你强制执行写操作。3. 字符流3.1. Reader方法int read()int read(char)int read(char, int offset, int length)简单读方法返回一个int值,它包含从流里读出的一个字符或者-1,其中-1表明文件结束。其它两种方法将数据读入到字符数组中,并返回所读的字符数。第三个方法中的两个int参数指定了所要填入的数组的子范围。void close()boolean ready()voidskip(long)boolean markSupported()void mark(int)void reset()这些方法与InputStr
9、eam中的对应方法相似3.2. Writer方法void write(int c)void write(char )void write(char , int offset, int length)void write(String string)void write(String string, int offset, int length)void close()void flush()所有这些方法与OutputStream中的方法类似。4. 节点流Java 2 SDK中有三种基本类型的节点:文件(file)、内存(memory)、管道(pipe)。typeCharacter Stream
10、sByte StreamsFileFileReaderFileWriterFileInputStreamFileOutputStreamMemory:ArrayCharArrayReaderCharArrayWriterByteArrayInputStreamByteArrayOutputStreamMemory:StringStringReaderStringWriterPipePipedReaderPipedWriterPipedInputStreamPipedOutputStream5. A Reader/Writer Example下面的例子从第一个命令行参数代表的文件中读字符,然后写
11、入第二个参数代表的文件。本例题阐述了Reader/Writer的子类FileReader/ FileWriter用法。import java.io.*;public class TestNodeStreams public static void main(String args) try FileReader input = new FileReader(args0);FileWriter output = new FileWriter(args1);char buffer = new char128;int charsRead;/ read the first buffercharsRea
12、d = input.read(buffer);while ( charsRead != -1 ) / write the buffer out to the output fileoutput.write(buffer, 0, charsRead);/ read the next buffercharsRead = input.read(buffer);input.close();output.close(); catch (IOException e) e.printStackTrace();6. A Buffered Reader/Writer Example本例题完成的功能与上一节的例题
13、相同。BufferedReader能够按行读取,BufferedWriter能够按行写出。import java.io.*;public class TestBufferedStreams public static void main(String args) try FileReader input = new FileReader(args0);BufferedReader bufInput = new BufferedReader(input);FileWriter output = new FileWriter(args1);BufferedWriter bufOutput = ne
14、w BufferedWriter(output);String line;/ read the first lineline = bufInput.readLine();while ( line != null ) / write the line out to the output filebufOutput.write(line, 0, line.length();bufOutput.newLine();/ read the next lineline = bufInput.readLine();bufInput.close();bufOutput.close(); catch (IOEx
15、ception e) e.printStackTrace();7. I/O流的链在程序中很少使用单独一个流对象,实际做法是将几个流对象串联起来处理共同数据。这样做会提高程序的效率。一个输入流链ProgramDataInputStreamBufferedInputStreampathFileInputStreamBufferedReaderInputStreamReaderInput.read() 读一个字节Input.read(char ) 读入一个字符数组 返回字符的个数Input.readLine()读入一行Output.write()写入一个字节Output.writer(char,0,
16、length)写入一个字符数组把从0到length个字符写到指定的文件中 Output.newLine()写入换行符Program一个输出流链pathFileOutputStreamBufferedOutputStreamDataOutputStreamOutput.write(double)写入一个字节型double数据pathprogramFileReaderBufferedReaderIn.read()读一个字符In.read(char)读一个字符数组In.readLine()读一行pathProgramBufferedWriterPrintWriterFileWriterOut.wri
17、te()写一个字符Out.write(char,0,length)写多个字符Out.newLine()换行pathprogramFileOutPutStreamObjectOutPutStreampathProgramObjectInputStreamFileInputStreamIn.readObject()读一个序例化的对象Out.writeObject()写入一个序例化的对象RandomAccessFilepathf=new RandomAccessFile(“path”,”rw”)创建一个随机存储文件类的实例f.readDouble();f.writerDouble(3.1415);8
18、. 过程流过程流在其它流之上,完成排序、变换等操作。过程流也被称做过滤流。当你需要改变输入流的原始数据时,你可以将一个过滤输入流连接到一个原始的输入流上。用过滤流将原始数据变换成你需要的格式。 过程流的类型9. 基本字节流类图15-4,图15-5阐述了输入,输出流的体系结构: 图15-4图15-59.1. FileInputStream和FileOutputStream这两个节点流用来操纵磁盘文件。这些类的构造函数允许你指定它们所连接的文件。要构造一个FileInputStream,所关联的文件必须存在而且是可读的。如果你要构造一个FileOutputStream而输出文件已经存在,则它将被覆
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 高级 IO 16
限制150内