Java程序设计教学课件-第九章 IO读和写

上传人:QQ15****706 文档编号:108088695 上传时间:2019-10-22 格式:PPT 页数:34 大小:653KB
返回 下载 相关 举报
Java程序设计教学课件-第九章 IO读和写_第1页
第1页 / 共34页
Java程序设计教学课件-第九章 IO读和写_第2页
第2页 / 共34页
Java程序设计教学课件-第九章 IO读和写_第3页
第3页 / 共34页
Java程序设计教学课件-第九章 IO读和写_第4页
第4页 / 共34页
Java程序设计教学课件-第九章 IO读和写_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《Java程序设计教学课件-第九章 IO读和写》由会员分享,可在线阅读,更多相关《Java程序设计教学课件-第九章 IO读和写(34页珍藏版)》请在金锄头文库上搜索。

1、第9章 I/O:读和写,华中科技大学IBM技术中心,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,I/O与流,I/O是程序设计中的重要问题,大部分的应用程序都需要I/O操作,比如从键盘获得用户输入、在屏幕输出运行结果、对磁盘文件进行读写等等。应用程序只有通过I/O操作才能实现与用户的交互及数据的处理及存储 在Java语言中,将不同类型的I/O抽象为流。所谓“流(stream)”,可以看作是数据在文件或程序之间的传递,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,输入流和输出流,一般来说,流有两种基本

2、形式:输入流和输出流,根据程序是作为数据流的目的端还是源端来划分。程序首先要打开一个流,才能与数据文件进行通信。 通过输入流,程序可以从数据文件读取数据,但不可向输入流中写入数据;反之,通过输出流,程序可以向数据文件中写入数据。程序与其他设备间的I/O也可以使用流,这时可将设备看作是一个数据文件。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Java I/O流类的组织模式,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,java.io,在Java开发环境中,主要是由包java.io中提供的一系列的类

3、和接口来实现输入/输出处理。而标准输入/输出处理则是由包java.lang中提供的类来处理的,这些类又都是从包java.io中的类继承而来的。 I/O类提供了低层次和高层次的界面。每一种介质都有一对与之相关联的输入输出类,它们提供低层次的面向数据序列(字符、字节)的界面。与介质相关的各个类都分别是输入输出抽象流类的子类,它们通常具有与介质相关的构造器及方法。 I/O抽象类为所有与介质相关的具体输入输出类提供了一个统一的界面。反过来各个具体的与介质相关的输入输出类也扩展了抽象类,通过它们可以实现在具体介质上的输入输出操作,华中科技大学IBM技术中心,HUST & IBM Computer Tec

4、h. Center,I/O操作的一般步骤,构造一个与介质相关的I/O对象,以提供一种低层次的方法将数据输入或输出到相应的介质; 将与介质相关的对象强制类型转换为它的父类(即抽象I/O类),并利用该对象构造一个流对象。这样便建立起了流类对象与介质相关对象的关联; 这时就可利用流对象的I/O方法进行相应介质上的数据读写。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字节流类,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,InputStream类,InputStream类定义了一套所有字节输入流所需的方

5、法,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,OutputStream类,OutputStream类定义了一套所有字节输出流所需的方法。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,字符流类,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,Reader与Writer类,Reader类的相关方法: void close() void mark(int readAheadLimit) boolean markSupported() int read()

6、 int read(char cbuf) int read(char cbuf, int off, int len) boolean ready() void reset() long skip(long n) Writer类的相关方法: void close() void flush() void write(char cbuf) void write(char cbuf, int off, int len) void write(int c) void write(String str) void write(String str, int off, int len),华中科技大学IBM技

7、术中心,HUST & IBM Computer Tech. Center,流的使用(1),华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,流的使用(2),华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,流的使用(3),华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,流的使用(4),华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,文件流,要对本机文件系统上的文件进行读写,需要使用文件流。Java的文件流类包括字符流

8、的FileReader、FileWriter和字节流的FileInputStream、FileOutputStream。文件流对象的构造需要提供文件名作为参数,也即可以通过文件名来创建文件流。这里的所谓文件名可以是字符串、File对象或FileDescriptor对象。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,例程,import java.io.*; class Copy private void copy(InputStream in, OutputStream out) throws IOException byte buf = new

9、 byte4096; int len = in.read(buf); while (len != -1) out.write(buf, 0, len); len = in.read(buf); public void cat(String fsrc, String fdest) try InputStream in = new FileInputStream(fsrc); OutputStream out = new FileOutputStream(fdest, true); copy(in, out); out.close(); in.close(); catch (IOException

10、 ex) System.err.println(ex); ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,例程-cont.,public class UseCopy public static void main(String args) Copy c=new Copy(); c.cat(“in.dat”,”out.dat”); ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,内存流,为了支持内存上的输入输出,java.io包内提供了一组相关的类: 字节流类ByteArrayInputStream

11、ByteArrayOutputStream StringBufferInputStream 字符流类CharArrayReader CharArrayWriter StringReader StringWriter,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,例程,import java.io.*; public class ByteArrayOutputStreamTest public static void main(String args) try ByteArrayOutputStream baos = new ByteArrayOu

12、tputStream(); PrintStream ps = new PrintStream(baos); for (int i = 0; i 1000; i+) ps.println(i + “ ABCDEFGHIJKLMNOPQRSTUVWXYZ“); long start = System.currentTimeMillis(); FileOutputStream fos = new FileOutputStream(“ByteArrayOutputStreamTest“); baos.writeTo(fos); fos.close(); long stop = System.curre

13、ntTimeMillis(); System.out.println(“time elapsed (milliseconds) = “ + (stop - start); catch (FileNotFoundException fnfe) System.out.println(fnfe.getMessage(); catch (IOException ioe) System.out.println(ioe.getMessage(); ,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,管道流,管道是用来把一个线程的输出连接到另一个线程的输入。管道输

14、入流作为一个通信管道的接收端,管道输出流则作为发送端。管道流必须是输入输出并用,也就是说在使用管道前,两者必须进行连接。,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,为什么要用到管道流?,当某个程序的输出作为另外一个程序的输入时,如果没有管道,就必须为程序提供一个存放中间结果的位置,前一个程序将输出数据写入该位置,而后一个程序再从该位置读出这些数据,这样的做法无疑是低效率的。 通过管道,可以连接程序的输出和输入,直接将前一程序的输出作为后一程序的输入,提高了程序效率。,华中科技大学IBM技术中心,HUST & IBM Computer Tech

15、. Center,管道流的连接方式,java.io中为字符类型和字节类型各提供了一对输入输出管道流类:PipedReader/ PipedWriter和PipedInputStream/PipedOutputStream。 管道流的连接方式有两种,以PipedInputStream/PipedOutputStream为例: 在构造方法中进行连接:PipedInputStream(PipedOutputStream pos); PipedOutputStream(PipedInputStream pis); 通过各自的connect()方法连接: 在类PipedInputStream中,conn

16、ect(PipedOutputStream pos); 在类PipedOutputStream中,connect(PipedInputStream pis);,华中科技大学IBM技术中心,HUST & IBM Computer Tech. Center,例程,class PipedExample public static void main(String args) throws IOException byte dataA = 123, dataB= 321; PipedInputStream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(pis); System.out.println(“PipedInputStream“); try pos.write(dataA); pos.write(dataB); System.o

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

当前位置:首页 > 办公文档 > 总结/报告

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