




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章JavaI/O系统,8.1文件类8.2JavaI/O结构8.3使用流8.4对象序列化8.5小结,8.1文件类,8.1.1文件类File8.1.2文件过滤,8.1.1文件类File-1,不管是程序员还是程序和文件系统打交道总是不可避免的,我们经常要用cd这个命令来更改当前目录,在Windows中用dir查看文件信息,在Unix系统中用ls查看文件信息。在Java语言中,用类File表示文件,File类可以处理各种文件操作。和文件相关的一个重要概念是目录,Java的类File既可以表示文件,也可以表示目录。类File有3个常用构建器:File(StringfileName)File(Stringdirectory,StringfileName)File(Filedirectory,StringfileName),8.1.1文件类File-2,第一个构建器通过文件名,可以是文件的完全路径名,也可以是相对路径名(相对于当前线程的工作目录),创建一个File对象。第二个构建器同时指定了文件的目录和文件名,第三个构建器和第二个的区别在于使用一个File对象而不是String对象来表示文件目录。下面我们通过例子来进行说明:,8.1.1文件类File-3,例8.1.1TheFile.javaimportjava.io.*;classTheFilepublicstaticvoidmain(Stringargs)FilediskC=newFile(C:/);FiletestFile=newFile(diskC,test);System.out.println(diskC.getAbsolutePath()+是否存在:+diskC.exists();System.out.println(testFile.getAbsolutePath()+是否存在:+testFile.exists();,8.1.1文件类File-4,程序运行结果:C:是否存在:trueC:test是否存在:false既然调用File类构建器并不能创建一个文件,那么我们如何创建一个文件呢?一种方法是调用File对象的方法createNewFile(),另一种更常用的方法是调用我们随后要介绍的类FileOutputStream的构建器,它还可以提供File类不具备的文件输出功能。File类的方法mkdir()和mkdirs()可以用来创建目录,这两个方法的区别在于mkdirs()可以创建目录路径中多层目录,即同时创建这个目录的父目录以及父目录的父目录,而mkdir()要求创建目录的父目录已存在。,8.1.1文件类File-5,File类大概有40个方法,下面我们列举其中一些较为常用的:booleancreateNewFile()如果File所表示的文件不存在则创建一个新的空文件,创建成功返回true,失败则返回false。booleandelete()删除File所表示的文件或目录,删除目录要求该目录为空,返回值表示删除动作是否成功。booleanmkdirs()创建一个目录。booleanrenameTo(Filedestination)对一个文件改名或移动。booleanisDirectory()检测File对象表示的是否为目录。publicbooleanisFile()检测File对象表示的是否为文件。booleancanRead()检测一个文件是否可读。,8.1.1文件类File-6,booleancanWrite()检测一个文件是否可写。booleanexists()检测一个文件是否存在。Stringlist()获取File所表示的目录下的文件和目录列表。longlastModified()返回文件最好修改时间。时间为基于1970-01-0100:00:00的毫秒数。StringgetPath()返回相对路径名(包括文件名)。StringgetAbsolutePath()返回完全路径名。StringgetParent()如果File对象指定了父目录,则返回父目录名,否则返回一个null值。StringgetName()返回File对象所表示对象的文件名或目录名。,8.1.1文件类File-7,下面在看一个File的应用实例,在Windows中我们可以使用DOS命令tree显示一个目录结构,即显示一个目录下包含的文件和子目录,以及子目录下再包含的文件和子目录。(程序源代码请参见教材例8.1.3)程序运行结果示例:C:javaJTreec:windowsc:windows|+$hf_mig$|+KB818529|+RTMQFE|-shdocvw.dll|-urlmon.dll|-spmsg.dll|-spuninst.exe|+update|-eula.txt.,8.1.1文件类File-8,在这个例子中,我们调用递归方法list,来显示指定目录下的子目录和文件。程序首先使用File对象的list()方法获得一个目录的所有成员列表,然后对每个目录成员构造一个File对象,调用其方法isDirectory()判断这个成员是否为目录,如果是,则进入该子目录,进一步获取子目录的成员列表。,8.1.2文件过滤-1,在很多情况下我们可能要根据文件名对文件进行过滤,这个时候就需要调用文件过滤方法。publicStringlist(FilenameFilterfilter)其中FilenameFilter是一个接口,其中声明了一个抽象方法:booleanaccept(Filedir,Stringname);通过实现这个接口就可以进行文件名过滤。在文件系统中,文件扩展名代表着文件类型,下面我们就实现一个例子,按文件扩展名进行文件名过滤。,8.1.2文件过滤-2,(程序源代码请参见教材例8.1.4)该程序运行结果显示当前目录下的java源文件:C:javaFileExtensionFilterAccess.javaEventListener.javaFileExtensionFilter.java.FilenameFilter是一个很简单的接口,在程序中为了增强代码的紧凑性,我们可以直接利用匿名内部内来实现这个接口,8.2JavaI/O结构,程序中的数据流,是对现实世界中水流的一个形似的抽象。流用来顺序地读写数据信息,它是一个单向的数据通道,输入流从某个外部的数据源向程序输入数据,输出流从程序向外部数据目标输出数据。位于java.io包中的类包含两组独立的类层次结构:一个用于读写字节,称为字节流;另一个用于读写字符,称为字符流。字节流与字符流的区别在于它们处理数据的方式。,8.2.1字节流-1,输入流(InputStream)和输出流(OutputStream)构成字节流的祖先,这两个类直接继承了Object类。InputStream和OutputStream都是抽象类,InputStream为其他所有字节输入流的超类,而OutputStream为其他所有字节输出流的超类。下面为字节输入流的类层次结构。,图8.2.1字节输入流的类层次结构,8.2.1字节流-2,图8.2.2字节输出流的类层次结构,8.2.1字节流-3,InputStream有9个直接的子类,OutputSteam有5个直接的子类InputStream的方法:publicabstractintread()throwsIOExceptionpublicintread(byteb)throwsIOExceptionpublicintread(byteb,intoff,intlen)throwsIOExceptionpublicintavailable()throwsIOExceptionpublicvoidmark(intreadlimit)publicvoidreset()throwsIOExceptionpublicbooleanmarkSupported()publiclongskip(longn)throwsIOExceptionpublicvoidclose()throwsIOException,8.2.1字节流-4,OutputStrem中定义了5个方法:publicabstractvoidwrite(intb)throwsIOExceptionpublicvoidwrite(byteb)throwsIOExceptionpublicvoidwrite(byteb,intoff,intlen)throwsIOExceptionpublicvoidflush()throwsIOExceptionpublicvoidclose()throwsIOException,8.2.2字符流-1,在实际应用中,存在一类文本数据,它们可能采用各种不同的字符编码方式(字符集),可能是单字节字符,也可能是多字节字符,这就需要借助于字符流来处理文本类信息。读取器(Reader)和写出器(Writer)是所有字符流的超类,它们是直接继承Object类的抽象类。,图8.2.3字符输入流的类层次结构,8.2.2字符流-2,图8.2.4字符输出流的类层次结构,8.2.2字符流-3,Reader和Writer定义了与InputStream和OutputStream类似的方法。Reader类中定义了和InputStream类似的read方法用来读取字符:publicintread()throwsIOExceptionpublicintread(charcbuf)throwsIOExceptionpublicabstractintread(charcbuf,intoff,intlen)throwsIOException在Writer类中定义了和OutputStream类似的write方法用来写出字符:publicvoidwrite(Stringstr)throwsIOExceptionpublicvoidwrite(charcbuf)throwsIOExceptionpublicabstractvoidwrite(charcbuf,intoff,intlen)throwsIOException,8.3使用流,8.3.1标准流8.3.2文件流8.3.3过滤器流8.3.4随机访问文件8.3.5读取器和写出器,8.3.1标准流,Java语言包中有一个类System,这个类没有共有的构建器,因此我们并不能创建这个类的对象实例,不过我们想了解的是它提供的3个有用的静态类字段:publicfinalstaticInputStreamin;publicfinalstaticPrintStreamout;publicfinalstaticPrintStreamerr;System类的这三个静态字段就是系统的标准流:System.in表示系统标准输入流,通常环境下标准输入流指向键盘输入;System.out表示系统标准输出流,通常环境下标准输出流指向屏幕输出;System.err表示系统标准错误输出流,通常环境下标准错误输出流也指向屏幕输出。,8.3.2文件流-1,文件读写是最常见的I/O操作,通过文件流来连接磁盘文件,读写文件内容是一件很轻松的工作。文件输入流(FileInputStream)和文件输出流(FileOutputStream)是抽象类InputStream和OutputStream的具体子类,实现了文件的读写。文件的读写工作包括3个步骤:打开文件输入流或输出流文件读或写操作关闭文件输入流或输出流,8.3.2文件流-2,FileInputStream有3个构建器:publicFileInputStream(StringfileName)throwsFileNotFoundExceptionpublicFileInputStream(Filefile)throwsFileNotFoundExceptionpublicFileInputStream(FileDescriptorfdObj)FileOutputStream最常用的两个构建器如下:publicFileOutputStream(Stringname)throwsFileNotFoundExceptionpublicFileOutputStream(Stringname,booleanappend)throwsFileNotFoundException无论是FileInputStream还是FileOutputStream,当程序不再使用时,就应该及时调用close()方法,进行关闭,这将允许操作系统释放与流相关的系统资源。publicvoidclose()throwsIOException,8.3.3过滤器流-1,Java的流按使用方式可以分为两类,一类是建立了程序和其他数据源或数据目标的数据通道,程序通过这类流可以和流的另一端的数据源或目标进行数据交互,这类数据流称为节点流(nodestream)。例如文件输入流FileInputStream和文件输出流FileOutputStream,在它们的另一端是磁盘文件。另一类流,本身并不和具体的数据源和数据目标连接,它们连接在其他输入或输出流上,提供各种数据处理,诸如转换、缓存、加密、压缩等功能,这类流称为过滤器流(filterstream)。过滤器输入流从已存在的输入流(比如FileInputStrem)读取数据,对数据进行适当的处理和改变然后再送入程序。过滤器输出流向已存在的输出流(比如FilterOutputSteam)写入数据,在数据抵达底层流之前进行转换处理等工作。,8.3.3过滤器流-2,过滤器输入流FilterInputStream和过滤器输出流FilterOutputStream分别为InputStream和OutputStream的子类。FilterInputStream的构建器如下:protectedFilterInputStream(InputStreamin)FilterOutputStream的构建器如下:publicFilterOutputStream(OutputStreamout),8.3.4随机访问文件,RandomAccessFile和FileInputStream和FileOutputStream不同,它既可以读取一个文件,也可以写入一个文件。RandomAccessFile类具有如下的构建器:publicRandomAccessFile(Stringname,Stringmode)throwsFileNotFoundExceptionpublicRandomAccessFile(Filefile,Stringmode)throwsFileNotFoundException其中第一个参数使用文件名或File对象指定一个文件。第二个参数mode指定文件的打开方式,mode为“r”时,指定文件按只读方式打开;mode为“rw”时,文件按只读写方式打开。,8.3.5读取器和写出器,Reader和Writer作为字符流的祖先,它们都是抽象类。InputStreamReader和OutputStreamWriter是我们常用的Reader和Writer的具体实现的子类。InputStreamReader可以从特定编码的数据源中读取文本信息,它的两个常用构建器如下:publicInputStreamReader(InputStreamin)publicInputStreamReader(InputStreamin,StringcharsetName)throwsUnsupportedEncodingException其中第一个参数要求指定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 模拟电路 试卷及答案
- 2025年大跨桥梁考试题及答案
- 2025年卫勤专业答辩题目及答案
- 2025年山东省职教高考(机械制造专业)综合知识高频必练考试题(附答案)
- 2025年基础工程题目及答案
- 数学数独考试题及答案
- TPM设备管理课件
- 过程控制系统试卷及答案
- theone智能钢琴课件教材
- TCT临床意义课件
- 海天注塑机全参数DOC资料全
- Test Plan Template:测试计划模板
- (完整版)三年级下册数学开学第一课ppt
- 苏教版四年级科学上册全册课件
- JJF1101-2019环境试验设备温度、湿度校准规范-(高清现行)
- 人教版新教材高中物理实验汇总及答案详解
- 中班语言《大狮子和小老鼠》课件
- TSG11-2020 锅炉安全技术规程
- 资助业务工作培训
- 《足球运动发展史》PPT课件
- IPQAM调制器操作说明书(共36页)
评论
0/150
提交评论