《输入与输出处理.ppt》由会员分享,可在线阅读,更多相关《输入与输出处理.ppt(31页珍藏版)》请在三一办公上搜索。
1、第8章 输入与输出处理,中国矿大计算机学院杨东平,第8章 输入与输出处理,本章讲述的主要内容 流的层次结构;输入/输出流、数据输入/输出流、文件输入/输出流及它们的常用方法;随机访问流;对象流以及对象序列化;输入/输出中的异常处理。,流的层次结构,流:指从数据发送地到接收地的数据序列;Java将读取数据的对象称为输入流;能向其写入数据的对象称为输出流。输入输出类主要是在java.io包中定义,使用输入/出流必须在程序的开头加上语句:import java.io.*;,流的层次结构(续),InputStream和OutputStream类结构,File类,File类与InputStream/Ou
2、tputStream类同属于一个包,它不允许访问文件内容。File类主要用于命名文件、查询文件属性和处理文件目录。支持的主要文件属性包括:文件是否存在、是否可读、是否可写、是否是一个目录;不支持的文件属性包括:是否隐藏、是否为系统文件、是否文档案文件;,File类(续),File对象对应的路径可以是绝对路径,也可以是相对路径。比较好的方式是使用绝对路径,一般不使用相对路径。,File类(续),File类(续),例8-1:文件测试 源程序 运行,InputStream类和OutputStream类,它们都是抽象类,不能创建对象;必须通过其子类实现实例化。,InputStream类的常用方法,(1
3、)public abstract int read()功能:读取一个byte的数据,返回值是高位补0的int类型值。(2)public int read(byte b)功能:读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的。(3)public int read(byte b,int off,int len)功能:从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。,InputStream类的常用方法(续),(4)public int available()功能:返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂
4、起。(5)public long skip(long n)功能:忽略输入流中的n个字节,返回值是实际忽略的字节数。(6)public int close()功能:关闭输入流。,OutputStream类的常用方法,(1)public void write(byte b)功能:将参数b中的字节写到输出流。(2)public void write(byte b,int off,int len)功能:将参数b的从偏移量off开始的len个字节写到输出流。(3)public abstract void write(int b)功能:先将int转换为byte类型,把低字节写入到输出流中。,OutputS
5、tream类的常用方法(续),(4)public void flush()功能:将数据缓冲区中数据全部输出,并清空缓冲区。(5)public void close()功能:关闭输出流并释放与流相关的系统资源。注意以下两点:,OutputStream类的常用方法(续),注意以下两点:上述各方法都有可能引起异常。InputStream和OutputStream都是抽象类,不能创建这种类型的对象。,FileInputStream类,FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:,方式1:File fin=new File(d:/ab
6、c.txt);FileInputStream in=new FileInputStream(fin);方式2:FileInputStream in=new FileInputStream(d:/abc.txt);,FileInputStream类(续),FileInputStream类对象代表了一个实际存在的文件,否则将引起FileNotFoundException异常,也就是说,在Java程序中应当捕获异常,或用throws指明可能要产生的异常;例8-2 源程序 运行,FileOutputStream类,FileOutputStream类用来处理以文件作为数据输出目的数据流;创建一个文件流对
7、象有两种方法:,方式1:File f=new File(d:/abc.txt);FileOutputStream out=new FileOutputStream(f);方式2:FileOutputStream out=new FileOutputStream(d:/abc.txt);,FileOutputStream类(续),例8-3:源程序 运行,写文件时注意,在向文件中写数据时,若文件已经存在,则覆盖存在的文件;当流的读/写操作结束时,应调用close方法关闭流。,DataInputStream和DataOutputStream类,DataInputStream类对象可以读取各种类型的数
8、据,而DataOutputStream类对象可以写各种类型的数据;创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:,FileInputStream in=new FileInputStream(d:/abc.txt);DataInputStream din=new DataInputStream(in);,DataInputStream类的常用方法,(1)public final int skipBytes(long n)功能:跳过输入流中n个字节的数据。(2)public final byte readByte()功能:从输入流中读取1个字节的数据。(3)public f
9、inal char readChar()功能:从输入流中读取1字符的数据。(4)public final int readInt()功能:从输入流中读取4字节的数据。,DataInputStream类的常用方法(续),(5)public final long readLong()功能:从输入流中读取8字节的数据。(6)public final String readLine()功能:从数据输入流中读取一行,并且包括换行符。(7)public final void readFully(byte b)功能:从数据输入流中读取b.length 个字节的数据,读到b数组中。,DataOutputStr
10、eam类的常用方法,(1)public final int size()功能:返回写到输出流中的字节数。(2)public final void writeBytes(String s)功能:将字符串s中的字符写到输出流中,写时忽略高8位。(3)public final void writeChars(String s)功能:将字符串s中的字符写到输出流中。(4)public final void writeInt(int v)功能:将参数v按4个字节的形式写到输出流中。,RandomAccessFile类,RandomAccessFile类实现了DataOutput和DataInput接口,
11、可用来读写各种数据类型。两个构造函数:public RandomAccessFile(String name,String mode)public RandomAccessFile(File file,String mode)mode的取值只能为“r”,或“rw”。若是其它模式则抛出异常IllegalArgumentException。,RandomAccessFile类(续),例8-4:从键盘读入一个文件名,然后将指定的数据写入文件,并显示其内容。源程序 运行,RandomAccessFile类(续),例8-5:采用命令行参数拷贝一个文件,然后输出该文件的内容。源程序 运行,RandomAc
12、cessFile类(续),关于例8-5注意以下几点采用循环一次读取多个字节到缓冲区,然后将缓冲区中的字节写入文件,这是一种文件处理中很常用的方法;在showContents方法中,通过包装File对象生成一个随机文件对象:File f=new File(fileName);RandomAccessFile fin=new RandomAccessFile(f,rw);,对象流和对象序列化,ObjectOutputStream类的writeObject()方法可以写入对象,但基本类型的变量,必须通过DataOutput中的writeInt方法写入。例如:,ObjectOutputStream o
13、ut=new ObjectOutputStream(FileOutputStream(t.tmp);out.writeInt(12345);out.writeObject(Today);/写对象out.writeObject(new Date()/写对象,对象序列化,将那些实现了Serializable接口的对象转换成一系列字节,并可在以后完全恢复原状。序列化机制能自动补偿操作系统间的差异。对象的序列化的方法:只要对象实现了Serializable接口即可。例8-6:源程序 运行,IOException类的几个子类,(1)public class EOFException功能:当碰到输入尾时,
14、抛出这种类型的异常。(2)public class FileNotFoundException功能:当文件找不到时,构造函数抛出这种类型的异常。(3)public class InterruptedIOException功能:当I/O操作被中断时,抛出这种类型的异常。(4)public class UTFDataFormatException功能:当在读的字符串中有UTF语法格式错误时,由DataInputStream.readUTF()方法抛出。,应用程序综合举例,例8-7(习题4)编写一个程序,采用命令行参数输入一个文本文件名和一个字符串,在这个文件内查找这个字符串。要求输出具有该字符串的所有文本行。源程序 命令行 运行 例8-8(习题5)编写一个程序,比较两个文件是否相同。源程序 命令行 运行,