《JAVA程序员培训定制课程》由会员分享,可在线阅读,更多相关《JAVA程序员培训定制课程(22页珍藏版)》请在金锄头文库上搜索。
1、第十四章JavaJava流式流式I/OI/O编程编程 1本章内容java流式输入/输出原理java基本I/O流类型字节流和字符流节点流和处理流2Java I/O基本原理为进行数据的输入/输出操作,Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream)。java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能。两种基本的流:输入流和输出流输入流: 只能从中读取数据,而不能向其写出数据输出流: 只能向其写出数据,而不能从中读取数据3节点流和处理流 节点流: 可以从/向一个特定的地方(节点)读写数据,例如磁盘或者一块内存。 处理流: 是对一个已存在的流的
2、连接和封装,通过所封装的流的功能调用实现数据读/写功能。4节点流和处理流5字符流和字节流按处理数据的单位划分,Java支持两 种基本的流类型: 字符流和字节流字节流字节流字符流字符流输入InputStreamReader输出OutputStreamWriter6InputStream类提供的方法 三个基本的read方法:int read()int read(byte buffer)int read(byte buffer, int offset, int length) 其它方法:void close()int available()skip(long n)boolean markSuppor
3、ted()void mark(int readlimit)void reset()7OutputStream类提供的方法 三个基本的write方法:void write(int c)void write(byte buffer)void write(byte buffer, int offset, int length) 其它方法void close()void flush()8Reader类提供的方法 三个基本的read方法:int read()int read(char cbuf)int read(char cbuf, int offset, int length) 其它方法void cl
4、ose()boolean ready()skip(long n)boolean markSupported()void mark(int readAheadLimit)void reset()9Writer类提供的方法 三个基本的write方法:void write(int c)void write(char cbuf)void write(char cbuf, int offset, int length)void write(String string)void write(String string, int offset, int length) 其它方法void close()voi
5、d flush()10节点流类型(Node Streams)类类 型型 字字 符符 流流字字 节节 流流FileFileReaderFileWriterFileInputStreamFileOutputStreamMemory ArrayCharArrayReaderCharArrayWriterByteArrayInputStreamByteArrayOutputStreamMemory StringStringReaderStringWriterPipePipedReaderPipedWriterPipedInputStreamPipedOutputStream11节点流应用举例-文件复制
6、 import java.io.*; public class Test1 public static void main(String args) try FileReader input = new FileReader(Test1.java); FileWriter output = new FileWriter(temp.txt); int read = input.read(); while ( read != -1 ) output.write(read);read = input.read(); input.close(); output.close(); catch (IOEx
7、ception e) System.out.println(e); 12缓冲功能处理流举例import java.io.*;public class Test2 public static void main(String args) try FileReader input = new FileReader(Test2.java); BufferedReader br = new BufferedReader(input); FileWriter output = new FileWriter(temp.txt); BufferedWriter bw = new BufferedWriter
8、(output); String s = br.readLine(); while ( s!=null ) bw.write(s);bw.newLine();s = br.readLine(); br.close(); bw.close(); catch (IOException e) e.printStackTrace();13Ex1 v练习M14-12/13页的例子,体会不同的数据输入输出流的用法;14I/O 流的链接15处理流(Processing Streams)处理类型 字 符 流字 节 流 BufferingBufferedReaderBufferedWriterBufferedI
9、nputStreamBufferedOutputStreamFilteringFilterReaderFilterWriterFilterInputStreamFilterOutputStreamConverting between bytes and characterInputStreamReaderOutputStreamWriterObject SerializationObjectInputStreamObjectOutputStreamData conversionDataInputStreamDataOutputStreamCountingLineNumberReaderLine
10、NumberInputStreamPeeking aheadPusbackReaderPushbackInputStreamPintingPrintWriterPrintStream16InputStream类层次InputStreamFileInputStreamPipedInputStreamObjectInputStreamSequenceInputStreamFilterInputStreamStringBufferInputStreamByteArrayInputStreamDataInputStreamBufferedInputStreamPushbackInputStreamLi
11、neNumberInputStream17OutputStream类层次OutputStreamFileOutputStreamObjectOutputStreamFilterInputStreamByteArrayOutputStreamDataOutputStreamBufferedOutputStreamPrintStreamPipedOutputStream18Reader类层次ReaderBufferedReaderStringReaderCharArrayReaderInputStreamReaderPipedReaderFilterReaderFileReaderPushback
12、ReaderLineNumberReader19Writer类层次WriterBufferedWriterStringWriterCharArrayWriterPipedWriterOutputStreamWriterPrintWriterFilterWriterFileWriter20使用不同的字符编码如果需要从与本地机器不同的字符编码格式的文件中读取数据(例如,从网络上的一台基于不同平台的 机 器 上 读 取 文 件 ) , 可 以 在 构 造InputStreamReader对象时显式指定其字符编码,例如: ir = new InputStreamReader(System.in, “ISO8859_1”)21Ex2实现一个简单的阅读器,要求如下:阅读器应具有可视化的用户界面,能够打开并显示本地的一个文本文件内容;练习使用菜单,文件对话框等组件扩充阅读器的功能,直至使之成为一个简单的文本编辑器;22