您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第8章 输入与输出处理
第8章输入与输出处理中国矿大计算机学院杨东平jsxhbc@163.comjsxhbc@163.comJava语言与网络编程1第8章输入与输出处理本章讲述的主要内容流的层次结构;输入/输出流、数据输入/输出流、文件输入/输出流及它们的常用方法;随机访问流;对象流以及对象序列化;输入/输出中的异常处理。jsxhbc@163.comJava语言与网络编程2流的层次结构流:指从数据发送地到接收地的数据序列;Java将读取数据的对象称为输入流;能向其写入数据的对象称为输出流。输入输出类主要是在java.io包中定义,使用输入/出流必须在程序的开头加上语句:importjava.io.*;jsxhbc@163.comJava语言与网络编程3流的层次结构(续)InputStream和OutputStream类结构jsxhbc@163.comJava语言与网络编程4File类File类与InputStream/OutputStream类同属于一个包,它不允许访问文件内容。File类主要用于命名文件、查询文件属性和处理文件目录。支持的主要文件属性包括:文件是否存在、是否可读、是否可写、是否是一个目录;不支持的文件属性包括:是否隐藏、是否为系统文件、是否文档案文件;jsxhbc@163.comJava语言与网络编程5File类(续)File对象对应的路径可以是绝对路径,也可以是相对路径。比较好的方式是使用绝对路径,一般不使用相对路径。jsxhbc@163.comJava语言与网络编程6File类(续)方法说明booleancanRead()测试文件是否可读booleancanWrite()测试文件是否可写intcompareTo(Filepathname)比较文件的路径是否相等booleancreateNewFile()打开新文件booleandelete()删除文件booleanequals(Objectobj)比较文件的路径是否相等booleanexists()测试文件是否存在StringGetAbsolutePath()取文件绝对路径StringgetName()取文件名称StringgetParent()取上层文件路径Stringgetpath()取文件路径booleanisAbsolute()测试文件路径是否为绝对路径booleanisDirectory()测试是否为目录booleanisFile()测试是否为文件booleanisHidden()测试文件属性是否为隐藏longlastModified()取文件最后修改时间longlength()取文件大小String[]list()取文件列表(以String数组存储)File[]listFile()取文件列表(以File数组存储)staticFile[]listRoots取系统根目录(以File数组存储)booleanmkdir()新增目录booleanmkdirs()新增目录,包括路径中不存在的目录booleanrenameTo(Filedest)更改文件名booleansetLastModified(longtime)设置文件的最后修改时间booleansetReadOnly()设置文件属性为只读StringtoString()将文件的路径转换为字符串jsxhbc@163.comJava语言与网络编程7File类(续)例8-1:文件测试源程序运行jsxhbc@163.comJava语言与网络编程8InputStream类和OutputStream类它们都是抽象类,不能创建对象;必须通过其子类实现实例化。jsxhbc@163.comJava语言与网络编程9InputStream类的常用方法(1)publicabstractintread()功能:读取一个byte的数据,返回值是高位补0的int类型值。(2)publicintread(byteb[])功能:读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的。(3)publicintread(byteb[],intoff,intlen)功能:从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。jsxhbc@163.comJava语言与网络编程10InputStream类的常用方法(续)(4)publicintavailable()功能:返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起。(5)publiclongskip(longn)功能:忽略输入流中的n个字节,返回值是实际忽略的字节数。(6)publicintclose()功能:关闭输入流。jsxhbc@163.comJava语言与网络编程11OutputStream类的常用方法(1)publicvoidwrite(byteb[])功能:将参数b中的字节写到输出流。(2)publicvoidwrite(byteb[],intoff,intlen)功能:将参数b的从偏移量off开始的len个字节写到输出流。(3)publicabstractvoidwrite(intb)功能:先将int转换为byte类型,把低字节写入到输出流中。jsxhbc@163.comJava语言与网络编程12OutputStream类的常用方法(续)(4)publicvoidflush()功能:将数据缓冲区中数据全部输出,并清空缓冲区。(5)publicvoidclose()功能:关闭输出流并释放与流相关的系统资源。注意以下两点:jsxhbc@163.comJava语言与网络编程13OutputStream类的常用方法(续)注意以下两点:上述各方法都有可能引起异常。InputStream和OutputStream都是抽象类,不能创建这种类型的对象。jsxhbc@163.comJava语言与网络编程14FileInputStream类FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:方式1:Filefin=newFile(d:/abc.txt);FileInputStreamin=newFileInputStream(fin);方式2:FileInputStreamin=newFileInputStream(d:/abc.txt);FileInputStream类(续)FileInputStream类对象代表了一个实际存在的文件,否则将引起FileNotFoundException异常,也就是说,在Java程序中应当捕获异常,或用throws指明可能要产生的异常;例8-2源程序运行jsxhbc@163.comJava语言与网络编程16FileOutputStream类FileOutputStream类用来处理以文件作为数据输出目的数据流;创建一个文件流对象有两种方法:方式1:Filef=newFile(d:/abc.txt);FileOutputStreamout=newFileOutputStream(f);方式2:FileOutputStreamout=newFileOutputStream(d:/abc.txt);FileOutputStream类(续)例8-3:源程序运行jsxhbc@163.comJava语言与网络编程18写文件时注意在向文件中写数据时,若文件已经存在,则覆盖存在的文件;当流的读/写操作结束时,应调用close方法关闭流。jsxhbc@163.comJava语言与网络编程19DataInputStream和DataOutputStream类DataInputStream类对象可以读取各种类型的数据,而DataOutputStream类对象可以写各种类型的数据;创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:FileInputStreamin=newFileInputStream(d:/abc.txt);DataInputStreamdin=newDataInputStream(in);jsxhbc@163.comJava语言与网络编程20DataInputStream类的常用方法(1)publicfinalintskipBytes(longn)功能:跳过输入流中n个字节的数据。(2)publicfinalbytereadByte()功能:从输入流中读取1个字节的数据。(3)publicfinalcharreadChar()功能:从输入流中读取1字符的数据。(4)publicfinalintreadInt()功能:从输入流中读取4字节的数据。jsxhbc@163.comJava语言与网络编程21DataInputStream类的常用方法(续)(5)publicfinallongreadLong()功能:从输入流中读取8字节的数据。(6)publicfinalStringreadLine()功能:从数据输入流中读取一行,并且包括换行符。(7)publicfinalvoidreadFully(byteb[])功能:从数据输入流中读取b.length个字节的数据,读到b数组中。jsxhbc@163.comJava语言与网络编程22DataOutputStream类的常用方法(1)publicfinalintsize()功能:返回写到输出流中的字节数。(2)publicfinalvoidwriteBytes(Strings)功能:将字符串s中的字符写到输出流中,写时忽略高8位。(3)publicfinalvoidwriteChars(Strings)功能:将字符串s中的字符写到输出流中。(4)publicfinalvoidwriteInt(intv)功能:将参数v按4个字节的形式写到输出流中。jsxhbc@163.comJava语言与网络编程23RandomAccessFile类RandomAccessFile类实现了DataOutput和DataInput接口,可用来读写各种数据类型。两个构造函数:publicRandomAccessFile(Stringname,Stringmode)publicRandomAccessFile(Filefile,Stringmode)mode的取值只能为“r”,或“rw”。若是其它模式则抛出异常IllegalArgumentException。RandomAccessFile类(续)例8-4:从键盘读入一个文件名,然后将指定的数据写入文件,并显示其内容。源程序运行jsxhbc@163.comJava语言与网络编程25RandomAccessFile类(续)例8-5:采用命令行参数拷贝一个文件,然后输出该文件的内容。源程序运行jsxhbc@163.comJava语言与网络编程26RandomAccessFile类(续)关于例8-5注意以下几点采用循环一次读取多个字节到缓冲区,然后将缓冲区中的字节写入文件,这是一种文件处理中很常用的方法;在showContents方法中,通过包装File对象生成一个随机文件对象:Filef=newFile(fileName);RandomAccessFilefin=newRandomAccessFile(f,rw);jsxhbc@163.comJava语言与网络编程27对象流和对象序列化ObjectOutputStream类的writeObject()方法可以写入对象,但基本类型的变量,必须通过DataOutput中的writeInt方法写入。例如:ObjectOutputStreamout=newObjectOutputStream(FileOutputStream(t.tmp));out.writeInt(12345);out.writeObject(Today);//写对象out.writeObject(newDa
本文标题:第8章 输入与输出处理
链接地址:https://www.777doc.com/doc-3218439 .html