1、第八章第八章 输入输出流与文件操作输入输出流与文件操作目录输入输出流的分类输入输出流的分类输入输出流的分类输入输出流的分类目录和文件管理目录和文件管理目录和文件管理目录和文件管理文件的随机访问文件的随机访问文件的随机访问文件的随机访问其他常用的流其他常用的流其他常用的流其他常用的流字符流字符流字符流字符流字节流字节流字节流字节流输入输出流的分类输入输出流的分类 Java流的概念Java使用流(stream)来执行输入输出(I/O)的功能,流是一种数据的源头和目的之间的通信途径。标准输入输出Java系统事先定义好两个流对象,分别与系统的标准输入和标准输出相联系,它们是System.in和Syst
2、em.outSystem是Java中一个功能很强大的类,利用它可以获得很多Java运行时的系统信息。3132输出流输出流(程序写出数据程序写出数据)输入流输入流(程序读入数据程序读入数据)Java中根据流操作的种类可分为:字节流和字符流。根据流的方向,流可分为两类:输入流和输出流。Java流类体系结构流类体系结构1Java流类体系结构流类体系结构2Java流类体系结构流类体系结构3Java流类体系结构流类体系结构4Java流的概念输入输出流的分类输入输出流的分类目录和文件管理目录和文件管理目录和文件管理目录和文件管理 32文件名的处理文件名的处理 31FileFile类类 文件或目录的生成文件
3、或目录的生成 文件属性测试文件属性测试 普通文件信息和工具普通文件信息和工具 目录操作目录操作 publicFile(Stringpath):如果path是实际存在的路径,则该File对象表示的是目录;如果path是文件名,则该File对象表示的是文件。publicFile(Stringpath,Stringname):path是路径名,name是文件名(不可为空)。publicFile(Filedir,Stringname):dir是路径名,name是文件名。StringgetName():得到一个文件的名称(不包括路径)。StringgetPath():得到一个文件的路径名。Stringg
4、etAbsolutePath():得到一个文件的绝对路径名。StringgetParent():得到一个文件的上一级目录名。StringrenameTo(FilenewName):将当前文件名更名为给定文件的完整路径。【例8.2】booleanexists():测试当前File对象所指示的文件或目录是否存在,若存在,返回True。booleancreateNewFile():创建当前文件。booleancanWrite():测试当前文件是否可写。booleancanRead():测试当前文件是否可读。booleanisFile():测试当前文件是否是文件(不是目录)。booleanisDire
5、ctory():测试当前文件是否是目录,若为目录则返回True。【例8.3】longlastModified():得到文件最近一次修改的时间。longlength():得到文件的长度,以字节为单位,若不存在,返回0。booleandelete():删除File对象代表的文件或目录,目录需为空。删除成功,返回True。booleanmkdir():生成一个由该对象指定的路径(新目录),若成功,返回True。booleanmkdirs():生成一个新的目录,包含子目录。若成功,返回true。booleanrenameTo(FilenewName):将当前File对象所代表的路径名改为newName
6、所代表的路径名。若成功,返回true。Stringlist():列出当前目录下的文件。【例8.4】FileFile类的应用类的应用 【例8.5】【例8.6】字节流字节流字节流字节流 缓冲区流缓冲区流BufferedInputStream和BufferedOutputStream 33顺序读/写文件(FileInputStream与FileOutputStream)31ByteArrayInputStream和ByteArrayOutputStream 32 在使用在使用FileInputStream类时,若关联的目录或者文件不存在,类时,若关联的目录或者文件不存在,Java会抛出一个会抛出一个
7、IOException异常。程序可以使用异常。程序可以使用try-catch块检测和处块检测和处理捕捉到的异常。理捕捉到的异常。为了把一个文件输入流对象与一个文件关联起来,可以使用下列为了把一个文件输入流对象与一个文件关联起来,可以使用下列的代码段来处理的代码段来处理Java产生的产生的IOEception异常。异常。例如:例如:try FileInputStream fis=new FileInputStream(java.txt);catch(IOException e)System.out.println(File Exception:+e);注:注:字节流字节流字节流字节流 Write
8、rWriter和和和和ReaderReader 以字符流方式向文件写入或从文件中读取数据,可以使用以字符流方式向文件写入或从文件中读取数据,可以使用Writer和和Reader类及其子类。类及其子类。Writer和和Reader类类都都是是抽抽象象类类,不不能能建建立立它它们们的的对对象象,所所以以只只能能通通过过它它们们子子类类对对象象对对文文件件进进行行操操作作。常常用用的的Writer类类的的子子类类包包括括FileWriter类类和和BufferedWriter类。类。FileWriter类构造方法如下:类构造方法如下:FileWriter(String fileName):参数:参数
9、fileName表示带路径的磁盘文件名。表示带路径的磁盘文件名。FileWriter(File file):参数:参数file表示为磁盘文件所建立的表示为磁盘文件所建立的File对象名。对象名。注:使用注:使用FileWriter进行文件操作时,为了减少磁盘读写次数,常常进行文件操作时,为了减少磁盘读写次数,常常使用具有缓冲功能的使用具有缓冲功能的BufferedWriter类。类。文件的随机访问文件的随机访问文件的随机访问文件的随机访问 31在java中,类RandomAccessFile 提供了随机访问文件的方法RandomAccessFile(Filefile,Stringmode):构
10、造一个随机访问文件流,file为被访问的文件对象,mode是用来指定存取的模式,mode可以为r(读)、w(写)或rw(读写)。RandomAccessFile(Stringname,Stringmode):构造一个随机访问文件流,以便访问由字符串name指定名字的文件,mode参数使用同上32RandomAccessFile类提供用来读取某种基本数据类型的数据或字符串的方法 boolean readBoolean()byte readByte()char readChar()double readDouble()float readFloat()int readInt()long readL
11、ong()short readShort()String readLine()33RandomAccessFile类提供用来向文件中写入某种基本类型的数据或字符串的方法voidwriteByte(byteb)voidwriteBytes(Strings)voidwriteChar(charc)voidwriteChars(Strings)voidwriteDouble(doubled)voidwriteFloat(floatf)voidwriteInt(inti)voidwriteLong(longl)voidwriteShort(shorts)34和目前文件位置有关的方法 voidseek(
12、longpos):将文件指针移到pos(不可为负)的位置,相对于文件初始位置值(初始值为0)。longgetFilePointer():得到目前文件指针的位置(相对于文件初始位置)。longlength():得到文件的长度。intskipBytes(intn):使文件指针向前移动指定的n个字节 使用使用DataOutputStream类向文件中写入各种类型数据的操作步骤:类向文件中写入各种类型数据的操作步骤:1 1、为磁盘文件建立、为磁盘文件建立File类对象;类对象;2 2、为该、为该File对象建立对象建立FileOutputStream类流对象,建立其与磁盘文件的类流对象,建立其与磁盘文
13、件的连接;连接;3 3、为该、为该FileOutputStream类对象建立类对象建立DataOutputStream类对象,利用类对象,利用DataOutputStream类的类的writeInt(),writeFloat(),writeDouble(),writeBoolean()等方法分别向文件中写入整型、单精度型、双精度型、布尔型等方法分别向文件中写入整型、单精度型、双精度型、布尔型等数据;等数据;4 4、写入操作完成后,利用、写入操作完成后,利用close()close()方法将流关闭,断开与磁盘文件的联方法将流关闭,断开与磁盘文件的联系。系。DataOutputStream流类流类
14、importjava.io.*;publicclassFilepublicstaticvoidmain(Stringargs)throwsIOExceptionintch;Filefile1=newFile(c:jdk1.3exampledataFile.txt);Filefile2=newFile(c:jdk1.3exampleoutFile.txt);tryFileInputStreamfin=newFileInputStream(file1);DataInputStreamdin=newDataInputStream(fin);inti=din.readInt();floatf=din.
15、readFloat();booleanb=din.readBoolean();din.close();从磁盘文件读取各类数据从磁盘文件读取各类数据【例8.16】FileOutputStreamfout=newFileOutputStream(file2);DataOutputStreamdout=newDataOutputStream(fout);dout.writeInt(i);dout.writeFloat(f);dout.writeBoolean(b);dout.close();System.out.println(整数:+i);System.out.println(浮点数:+f);Sy
16、stem.out.println(布尔量:+b);catch(FileNotFoundExceptione)System.out.println(e);catch(IOExceptione)System.out.println(e);从磁盘文件读取各类数据从磁盘文件读取各类数据 import java.io.*;public class File public static void main(String args)int ch;InputStreamReader iin=new InputStreamReader(System.in);BufferedReader bin=new BufferedReader(iin);File file1=new File(c:jdk1.3exampledataFile.txt);try FileOutputStream fout=new FileOutputStream(file1);DataOutputStream dout=new DataOutputStream(fout);System.out.println(输入整数输入整数);int
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1