书签 分享 收藏 举报 版权申诉 / 29
上传文档赚钱

类型《Java语言程序设计实验指导》电子教案第10章.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3571632
  • 上传时间:2022-09-19
  • 格式:PPT
  • 页数:29
  • 大小:304.06KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《Java语言程序设计实验指导》电子教案第10章.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Java语言程序设计实验指导 Java 语言程序设计 实验 指导 电子 教案 10
    资源描述:

    1、Return第第10章输入与输出章输入与输出 10.1 Java10.1 Java输入输入/输出基础输出基础10.2 10.2 读取控制台输入读取控制台输入 10.3 10.3 向控制台写输出向控制台写输出 10.4 10.4 流类流类10.5 10.5 文件的读写文件的读写 在Java语言中,输入与输出完全基于“流”这个概念。Java输入输出的流式接口为复杂而繁重的I/O编程任务提供了一个简洁的抽象。本章将对这方面的内容作详细介绍。Return10.1 Java10.1 Java输入输入/输出基础输出基础10.1.1 流的概念 10.1.2 字节流和字符流 10.1.3 预定义流 10.1.

    2、4 Java输入/输出类和接口 关于Java的输入/输出问题我们在前面的程序代码中一般都接触过,只是没有系统地进行讨论。本节将对Java的输入/输出问题作一个概述。10.1.1流的概念 我们知道,多数程序在不获取外部数据的情况下不能顺利完成目标。数据从一个输入源获得,程序的结果被送到输出目的地。在Java中,这些源和目的地被广泛地定义。例如一个网络连接器,内存缓冲区或磁盘文件可以被Java输入/输出类熟练地操作。尽管从物理意义上很难说明,这些外设都由相同的抽象体流(stream)来处理。流是一个生产或消费信息的逻辑实体,它通过Java输入/输出系统与物理设备相连。尽管与之相连的实际物理设备各不

    3、相同,但是所有的流都以同样的方式运转。Java程序通过流来完成输入/输出,它是生产或消费信息的抽象。流通过Java的输入/输出系统与物理设备链接。尽管与它们链接的物理设备不尽相同,但是所有流的行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个洁净的方法,例如它不需要代码理解键盘和网络的不同。Java中流的实现是基于java.io包定义的类层次结构的。Return10.1.2字节流和字符流 在Java 2中,定义

    4、了两种类型的流:字节类和字符类。字节流(byte stream)为处理字节的输入和输出提供了方便的方法。例如,使用字节流读取或书写二进制数据。字符流(character stream)为字符的输入和输出处理提供了方便。这两种流采用了统一的编码标准,因而可以国际化。当然,在某些场合字符流比字节流更为有效。在Java的早期版本(Java 1.0)中不包括字符流,因此所有的输入和输出都是以字节为单位的。后来,Java 1.1中加入了字符流,某些字节形式的类和方法不被推荐使用。这也是为什么没用字符流的老代码在适当的地方需要更新的原因。需要说明的是,在最底层,所有的输入/输出都是字节形式的。基于字符的流

    5、只是为处理字符提供方便有效的方法。下面对字节流和字符流分别作简要介绍。字节流由两个类层次结构定义。在顶层有两个抽象类:InputStream 和 OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件、网络连接、甚至是内存缓冲区。各种字节流类及其相关说明见教材P235页。1字节流类字节流类 字符流类由两个类层次结构定义。顶层有两个抽象类:Reader和Writer。这些抽象类处理统一编码的字符流。在Java中这些类含有多个具体的子类详见教材P235236页。2字符流类字符流类Return10.1.3预定义流 我们已经知道,所有的Java程序运行时自动

    6、导入java.lang包,这个包定义了一个名为System的类,该类封装了运行时环境的多个方面。例如,使用它的某些方法,能获得当前时间和与系统有关的不同属性。System同时还包含有3个预定义的流变量:in、out和err。这些成员在System中是被定义成public和static型的,即意味着它们可以不引用特定的System对象而被用于程序的其他部分。System.out是标准的输出流,在默认情况下它是一个控制台;System.in是标准输入,默认情况下指的是键盘;System.err指的是标准错误流,它默认是控制台。需要指出的是,这些流可以重定向到任何兼容的输入/输出设备。System.

    7、in是InputStream的对象;System.out和System.err是PrintStream的对象。尽管它们是用来读写外设字符的,它们都是字节流。如果编程人员愿意,可以用基于字符的流来包装它们。在前面章节中多次用到过System.out,我们可以同样的方式使用System.err。System.in的使用则稍微复杂一些。Return10.1.4 Java输入/输出类和接口 在Java 2中,java.io包定义的输入/输出类见教材P236237页。不难发现,其中包含了前面所介绍的字节流和字符流。其中,ObjectInputStream.GetField和ObjectOutputStr

    8、eam.PutField是Java 2中新添的内部类。对于Java 2不推荐使用的两个类LineNumber InputStream和StringBufferInputStream,上面没有列出。虽然java.io中予以保留,但一般情况下不应使用。由java.io定义的接口见教材237页。其中,FileFilter接口是Java 2中新增的。从以上介绍不难发现,java.io包中有很多的类和接口,包括各种字节流、字符流、对象序列化(对象的存储和释放)。后面我们将介绍其中一些最常用的I/O成员。ReturnReturn10.2 读取控制台输入 10.2.1如何读取控制台输入 10.2.2读取字符

    9、 10.2.3读取字符串 在本节中,我们将介绍Java如何读取控制台输入的有关问题。10.2.1如何读取控制台输入 在Java 1.0中,完成控制台输入的唯一途径是字节流,这种方法现在依旧可用。但是,这种做法不值得推荐。在Java 2中,读取控制台输入的首选方法应该是字符流,它使程序容易符合国际标准,并且易于维护。在Java中,控制台输入由从System.in读取数据来完成。为获得属于控制台的字符流,在BufferedReader对象中包装了System.in。BufferedReader支持缓冲输入流,它最常见的构造函数如下:BufferedReader(Reader inputReader

    10、)其中,inputReader是链接被创建的BufferedReader实例的流。Reader是一个抽象类,它的一个具体的子类是InputStreamReader,该子类将字节转换成字符。为获得链接System.in的一个InputStreamReader的对象,使用下面的构造函数:InputStreamReader(InputStream inputStream)由于System.in引用了InputStream 类型的对象,它可以用于inputStream。综上所述,下面的代码创建了与键盘相连的BufferedReader对象。BufferedReader br=new BufferedR

    11、eader(new InputStreamReader(System.in);当该语句执行后,br是通过System.in生成的链接控制台的字符流。Return10.2.2读取字符 要从BufferedReader读取字符,用read()。例如:int read()throws IOException 该方法每次执行都从输入流读取一个字符,然后以整型形式返回。当遇到流的末尾时,它 返 回-1。可 以 看 到,它 要 引 发 一 个IOException异常。分析教材P238页的例子。Return10.2.3读取字符串 从键盘读取字符串,使用readLine()方法,它是BufferedRead

    12、er 类的成员。这个方法的一般使用形式如下。String readLine()throws IOException 该方法返回一个String对象。例如,教材P239页的程序可生成一个小文本编辑器。它创建了一个String对象的数组,然后依行读取文本,将文本的每一行存入到数组中。当它读到100行或输入“stop”时才停止。该例程使用一个BufferedReader类来从控制台读取数据。ReturnReturn10.3 向控制台写输出 10.3.1 如何向控制台写输出 10.3.2 PrintWriter类 在前面章节中我们接触过的控制台输出方式有print()和println()等简单途径,这

    13、两种方法由PrintStream(System.out引用的对象类型)定义。本节介绍如何进行控制台写输出。10.3.1如何向控制台写输出 因为PrintStream是从OutputStream派生的输出流,它同样实现低级方法write()。write()可用来向控制台写数据,PrintStream定义的write()的最简单形式是:void write(int byteval)该方法按照byteval指定的数向文件写字节。尽管byteval定义成整数,但只有低位的8个字节被写入。下面的例程用write()向屏幕输出字符“A”,然后是新的行:/Demonstrate System.out.wri

    14、te().class WriteDemo public static void main(String args)int b;b=A;System.out.write(b);System.out.write(n);一般情况下,我们不用write()来完成向控制台的输出,尽管在某些场合很有效。相比来说print()和println()方法更容易使用。Return10.3.2 PrintWriter 类 尽管Java允许使用System.out向控制台写数据,但建议仅用于调试程序时。对于实际的程序,Java推荐的向控制台写数据的方法是用PrintWriter流。PrintWriter是基于字符的类

    15、,用基于字符的类向控制台写数据使程序更为国际化。PrintWriter定义了多个构造函数,我们所用到的一个如下。PrintWriter(OutputStream outputStream,boolean flushOnNewline)这里,outputStream是OutputStream类的对象,flushOnNewline控制Java是否在println()方法被调用时刷新输出流。如果flushOnNewline为true,刷新自动发生,若为false,则不发生。PrintWriter支持所有类型(包括Object)的print()和println()方法,这样,我们就可以像用System

    16、.out那样用这些方法。如果遇到不同类型的情况,PrintWriter方法调用对象的toString()方法并打印结果。用PrintWriter向外设写数据,指定输出流为System.out,并在每一新行后刷新流。教材P241页的代码创建了与控制台输出相连的PrintWriter类。ReturnReturn10.4 流类流类10.4.1字节流 10.4.2字符流 前面我们简单介绍了控制台的输入/输出,下面我们具体介绍各种流类。Java 的流式输入/输出建立在4个抽象类的基础上:InputStream、OutputStream、Reader和Writer。这些类在前面已经提到过,它们用来创建具体

    17、流式子类。尽管程序通过具体子类执行输入/输出操作,顶层的类定义了所有流类的基础通用功能。我们已经知道,InputStream和OutputStream设计成字节流类,而Reader和Writer为字符流设计。字节流类和字符流类形成分离的层次结构。一般说来,处理字符或字符串时应使用字符流类,处理字节或二进制对象时应使用字节流类。下面分别介绍字节流和字符流类。10.4.1字节流 字节流类为处理字节式输入/输出提供了丰富的环境,一个字节流可以和其他任何类型的对象并用,包括二进制数据。这样的多功能性使得字节流对很多类型的程序都很重要。由于字节流类以InputStream 和OutputStream为顶

    18、层,我们就从讨论这两个类开始。InputStream是一个定义了Java流式字节输入模式的抽象类,该类的所有方法在出错条件下引发一个IOException 异常。InputStream的各种方法见教材P242页。1InputStream(输入流)(输入流)OutputStream是定义了流式字节输出模式的抽象类,该类的所有方法返回一个void 值并且在出错情况下引发一个IOException异常。OutputStream的各种方法见教材P242页。2OutputStream(输出流)(输出流)FileInputStream 类创建一个能从文件读取字节的InputStream 类,它的两个常用的

    19、构造函数如下:FileInputStream(String filepath)FileInputStream(File fileObj)它们都能引发FileNotFoundException异常。这里,filepath 是文件的全称路径,fileObj是描述该文件的File对象。分析教材P243页的例子。3FileInputStream(文件输入流)(文件输入流)FileOutputStream 创建了一个可以向文件写入字节的类OutputStream,它常用的构造函数如下:FileOutputStream(String filePath)FileOutputStream(File fileO

    20、bj)FileOutputStream(String filePath,boolean append)它们可以引发IOException或SecurityException异常。这里,filePath是文件的全称路径,fileObj是描述该文件的File对象。如果append为true,文件以设置搜索路径模式打开。FileOutputStream的创建不依赖于文件是否存在。在创建对象时FileOutputStream在打开输出文件之前创建它。这种情况下,如果试图打开一个只读文件,将会引发一个 IOException异常。教材P244245页的例子用于创建一个样本字节缓冲器。4FileOutpu

    21、tStream(文件输出流)(文件输出流)RandomAccessFile包装了一个随机访问的文件,注意它不是派生于InputStream和OutputStream,而是实现了基本输入/输出方法的DataInput和DataOutput接口。它同样支持定位请求,也就是说可以在文件内部放置文件指针。它有两个构造函数:RandomAccessFile(File fileObj,String access)throws FileNotFoundExceptionRandomAccessFile(String filename,String access)throws FileNotFound Exc

    22、eption 第一种形式,fileObj指定了作为File 对象打开的文件的名称;第二种形式,文件名是由filename参数传入的。两种情况下,access 都决定允许访问何种文件类型。如果是“r”,那么文件可读不可写,如果是“rw”,文件以读写模式打开。5RandomAccessFile(随机访问文件类)(随机访问文件类)ByteArrayInputStream是把字节数组当成源的输入流。该类有两个构造函数,每个构造函数需要一个字节数组提供数据源。ByteArrayInputStream(byte array)ByteArrayInputStream(byte array,int start

    23、,int numBytes)这里,array是输入源。第二个构造函数创建了一个InputStream类,该类从字节数组的子集生成,以start指定索引的字符为起点,长度由numBytes决定。教材P246页的例子创建了两个ByteArrayInputStream对象,并用字母表的字节初始化它们。6ByteArrayInputStream(字节数组输入流)(字节数组输入流)B y t e A r r a y O u t p u t S t r e a m 是 一 个 把 字 节 数 组 当 作 输 出 流 的 实 现。ByteArrayOutputStream 有两个构造函数,分别如下:Byte

    24、ArrayOutputStream()ByteArrayOutputStream(int numBytes)在第一种形式里,一个32位字节的缓冲器被生成。第二个构造函数生成一个跟指定numBytes相同位数的缓冲器。缓冲器保存在ByteArrayOutputStream的受保护的buf 成员里。缓 冲 器 的 大 小 在 需 要 的 情 况 下 会 自 动 增 加。缓 冲 器 保 存 的 字 节 数 是 由ByteArrayOutput Stream的受保护的count域保存的。教材P247页的例程演示了ByteArrayOutputStream的使用。7ByteArrayOutputStre

    25、am(字节数组输出流)(字节数组输出流)过滤流(filtered stream)仅仅是底层透明地提供扩展功能的输入流(输出流)的包装。这些流一般由普通类的方法访问。典型的扩展是缓冲,字符转换和原始数据转换。这些过滤字节流是FilterInputStream 和FilterOutputStream。它们的构造函数分别如下。FilterOutputStream(OutputStream os)FilterInputStream(InputStream is)这些类提供的方法和InputStream 及OutputStream类的方法相同。8过滤字节流过滤字节流 对于字节流,缓冲流(buffered

    26、 stream)是一种字节流,通过把内存缓冲器连到输入/输出流而扩展一个过滤流类。该缓冲器允许Java对多个字节同时进行输入/输出操作,提高了程序性能。因为缓冲器可用,所以可以跳过、标记和重新设置流。缓冲字节流类是BufferedInputStream 和BufferedOutputStream。PushbackInputStream 也可实现缓冲流。详细情况见教材P248251页的介绍。9缓冲字节流缓冲字节流10SequenceInputStream(顺序输入流)(顺序输入流)SequenceInputStream类允许连接多个InputStream流,这个类的构造不同于任何其他的Input

    27、Stream。SequenceInputStream构造函数要么使用一对InputStream,要么用InputStream的一个Enumeration,一般形式如下:SequenceInputStream(InputStream first,InputStream second)SequenceInputStream(Enumeration streamEnum)从操作上来讲,该类满足读取完第一个InputStream后转去读取第二个流的读取要求。使用Enumeration的情况下,它将继续读取所有InputStream流直到最后一个被读完。分析教材P251252页的示例。PrintStre

    28、am具有我们在System文件句柄使用过的System.out所有的格式化性能。PrintStream有两个构造函数:PrintStream(OutputStream outputStream)PrintStream(OutputStream outputStream,boolean flushOnNewline)当flushOnNewline控制Java每次刷新输出流时,输出一个换行符(n)。如果flushOnNewline为true,自动刷新;若为false,刷新不能自动进行。第一个构造函数不支持自动刷新。Java的PrintStream对象支持包括Object在内的各种类型的print(

    29、)和println()方法。如果参数不是一个简单类型,PrintStream方法将调用对象的toString()方法,然后打印结果。11PrintStream(打印流)(打印流)Return 尽管字节流提供了处理任何类型输入/输出操作的足够的功能,它们不能直接操作Unicode字符。既然Java的主要目标是支持“只写一次,到处运行”的信念,包括直接的字符输入输出支持是必要的。本节将讨论几个字符输入输出类。如前所述,字符流层次结构的顶层是Reader和Writer抽象类,下面从这两个类开始介绍。10.4.2 字符流字符流 Reader是定义Java的流式字符输入模式的抽象类,该类的所有方法在出错

    30、情况下都将引发IOException 异常。教材P253页给出了Reader类中的各种方法。1Reader类类 Writer是定义流式字符输出的抽象类,所有该类的方法都返回一个void 值并在出错条件下引发IOException 异常。教材P253页给出了Writer类中的各种方法。2Writer类类 FileReader类创建了一个可以读取文件内容的Reader类,它最为常用的构造函数形式如下:FileReader(String filePath)FileReader(File fileObj)每一个都能引发一个FileNotFoundException异常。在这里,filePath是一个文

    31、件的完整路径,fileObj是描述该文件的File 对象。教材P254页的例子演示了怎样从一个文件逐行读取并把它输出到标准输入流。3FileReader类类 FileWriter创建一个可以写文件的Writer 类,它最常用的构造函数形式如下 FileWriter(String filePath)FileWriter(String filePath,boolean append)FileWriter(File fileObj)它们可以引发IOException或者SecurityException异常。在这里,filePath是文件的完全路径,fileObj是描述该文件的File对象。如果ap

    32、pend为true,输出是附加到文件尾的。FileWriter类的创建不依赖于文件存在与否。在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果试图打开一个只读文件,将引发一个IOException异常。教材P254255页的例子是对前面讨论FileOutputStream时用到例子的字符流形式的版本。它创建了一个样本字符缓冲器,开始生成一个String,然后用getChars()方法提取字符数组。4FileWriter类类 CharArrayReader是一个将字符数组作为源的输入流的实现。该类有两个构造函数,每一个都需要一个字符数组提供数据源。CharArrayRead

    33、er(char array)CharArrayReader(char array,int start,int numChars)这里,array是输入源。第二个构造函数从字符数组的子集创建了一个Reader,该子集以start指定的索引开始,长度为numChars。教材P255页的例子用到了上述CharArrayReader的两个构造函数。5CharArrayReader类类 CharArrayWriter 实现了以数组作为目标的输出流。CharArrayWriter 有两个构造函数。CharArrayWriter()CharArrayWriter(int numChars)第一种形式,创建了

    34、一个默认长度的缓冲器;第二种形式,缓冲器长度由numChars指定。缓冲器保存在CharArrayWriter的buf 成员中。缓冲器大小在需要的情况下可以自动增长。缓冲器保持的字符数包含在CharArrayWriter的count 成员中。buf 和count 都是受保护的域。教材P256页的例子演示了CharArrayWriter的使用。6CharArrayWriter类类 BufferedReader通过缓冲输入提高性能,它有两个构造函数:BufferedReader(Reader inputStream)BufferedReader(Reader inputStream,int buf

    35、Size)第一种形式创建一个默认缓冲器长度的缓冲字符流;第二种形式,缓冲器长度由bufSize传入。和字节流的情况相同,缓冲一个输入字符流,Java同样支持并提供缓冲器中流内的反向移动机制。为支持这点,BufferedReader实现了mark()和reset()方法,并且Buffered Reader.mark Supported()返回true。教材P257页的例子改写了前面的BufferedInputStream例子,它用一个BufferedReader字符流而不是用一个缓冲字节流。7BufferedReader类类 BufferedWriter是一个增加了flush()方法的Write

    36、r。flush()方法可以用来确保数据缓冲器确实被写到实际的输出流。用BufferedWriter 可以通过减小数据被实际地写到输出流的次数而提高程序的性能。BufferedWriter类有下面的两个构造函数:BufferedWriter(Writer outputStream)BufferedWriter(Writer outputStream,int bufSize)第一种形式创建了使用默认大小缓冲器的缓冲流;第二种形式中,缓冲器大小是由bufSize参数传入的。8BufferedWriter类类 PushbackReader类允许一个或多个字符被送回输入流,这使你可以对输入流进行预测。下

    37、面是它的两个构造函数:PushbackReader(Reader inputStream)PushbackReader(Reader inputStream,int bufSize)第一种形式创建了一个允许单个字节被推回的缓冲流;第二种形式,推回缓冲器的字符流大小由bufSize参数传入。PushbackReader提供了unread()方法,该方法返回一个或多个字符到调用的输入流。它有下面的三种形式:void unread(int ch)void unread(char buffer)void unread(char buffer,int offset,int numChars)第一种形式推

    38、回ch传入的字符。它是被并发调用的read()返回的下一个字符;第二种形式返回buffer中的字符;第三种形式推回buffer中从offset开始的numChars个字符。如果在推回缓冲器为满的条件下试图返回一个字符,一个IOException异常将被引发。分析教材P259页的例子。9PushbackReader类类 PrintWriter本质上是PrintStream的字符形式的版本,它提供格式化的输出方法print()和println()。PrintWriter有下面的4个构造函数:PrintWriter(OutputStream outputStream)PrintWriter(Outp

    39、utStream outputStream,boolean flushOnNewline)PrintWriter(Writer outputStream)PrintWriter(Writer outputStream,boolean flushOnNewline)flushOnNewline控制Java是否在每次输出换行符(n)时刷新输出流。若flushOnNewline为true,刷新自动发生;若为false,不进行自动刷新。第一个和第三个构造函数不能进行自动刷新。10PrintWriter类类ReturnReturn10.5 文件的读写 10.5.1 如何进行文件读写10.5.2 File

    40、类 10.5.3 目录 前面我们在许多地方都已经接触到了文件的读写问题,但不是很系统。在本节里,将对文件的读写问题作一个集中的说明介绍。10.5.1如何进行文件读写 Java为编程人员提供了一系列的读写文件的类和方法。在Java中,所有的文件都是字节形式的。Java提供了从文件读写字节的方法,而且允许在字符形式的对象中使用字节文件流。这些在前面已作描述。两个最常用的流类是FileInputStream和FileOutputStream,它们生成与文件链接的字节流。为打开文件,只需创建这些类中某一个类的一个对象,在构造函数中以参数形式指定文件的名称。这两个类都支持其他形式的重载构造函数。下面是我

    41、们将要用到的形式:FileInputStream(String fileName)throws FileNotFoundExceptionFileOutputStream(String fileName)throws FileNotFoundException这里,fileName指定需要打开的文件名。当你创建了一个输入流而文件不存在时,引发FileNotFoundException异常。对于输出流,如果文件不能生成,则引发FileNotFound Exception异常。如果一个输出文件被打开,所有原先存在的同名的文件被破坏。当对文件的操作结束后,需要调用close()来关闭文件。该方法在F

    42、ileInputStream和FileOutputStream中都有定义,具体形式如下。void close()throws IOException为读文件,可以使用在FileInputStream中定义的read()方法,形式如下。int read()throws IOException 该方法每次被调用,它仅从文件中读取一个字节并将该字节以整数形式返回。当读到文件尾时,read()返回-1。该方法可以引发IOException异常。教材P260页的程序使用read()来输入和显示文本文件的内容。该文件名以命令行形式指定。教材P261页的例子用write()拷贝一个文本文件。Return10

    43、.5.2 File类 尽管java.io定义的大多数类是实行流式操作的,但File类不是,它直接处理文件和文件系统。也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限、时间、日期和目录路径。此外,File还浏览子目录层次结构。很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源。Java中的目录当成File 对待,它具有附加的属性:一个可以被list()方法检测的文件名列表。下面的构造函数可以用来生成File对象。File(String

    44、directoryPath)File(String directoryPath,String filename)File(File dirObj,String filename)在这里,directoryPath是文件的路径名,filename 是文件名,dirObj是一个指定目录的File 对象。教材P263页的例子演示了几个File方法的使用。Return10.5.3 目录 目录实质上是一个包含其他文件和路径列表的File 类。当创建一个File对象并且它是目录时,isDirectory()方法返回ture。在这种情况下,可以调用该对象的list()方法来提取该目录内部其他文件和目录的列表

    45、。该方法有两种形式,第一种形式如下:String list()文件列表在一个String对象数组中返回。教材P264页程序说明如何用list()来检查一个目录的内容。如果总是希望能够限制由list()方法返回的文件数目,使它仅返回那些与一定的文件名方式或者过滤(filter)相匹配的文件。为达到这样的目的,必须使用list()的第二种形式。String list(FilenameFilter FFObj)该形式中,FFObj是一个实现FilenameFilter接口的类的对象。FilenameFilter仅定义了一个方法accept(),该方法被列表中的每个文件调用一次。它的一般形式如下:bo

    46、olean accept(File directory,String filename)当被directory指定的目录中的文件(也就是那些与filename 参数匹配的文件)包含在列表中时,accept()方法返回true;当这些文件没有包括在列表中时,accept()返回false。教材P265页显示的OnlyExt类实现FilenameFilter接口,它被用来修饰前面的程序,限制由list()返回的文件名的可见度,把对象被创建时以指定扩展名结束的文件归档。1使用使用FilenameFilter接口接口 在Java 2中,增加了list()方法的一个变化形式,名为listFiles()。

    47、读者将会发现该方法很有用,其使用形式如下:File listFiles()File listFiles(FilenameFilter FFObj)File listFiles(FileFilter FObj)上述三种形式以File对象矩阵的形式返回文件列表,而不是用字符串形式返回。第一种形式返回所有的文件,第二种形式返回满足指定FilenameFilter接口的文件。除了返回一个File 对象数组,这两个listFiles()方法就像list()方法一样工作。第三种listFiles()形式返回满足指定FileFilter的路径名的文件。FileFilter只定义了一个 accept()方法,

    48、该方法被列表中的每个文件调用一次。它的一般形式如下:boolean accept(File path)如果文件被包括在列表中(即与path参数匹配的文件),accept()方法返回true;如果不被包括,则返回false。2listFiles()方法()方法 另外两个有用的File类的方法是mkdir()和mkdirs()。mkdir()方法创建了一个目录,创建成功返回true,创建失败返回false。创建失败是指File对象指定的目录已经存在,或者是因为整个路径不存在而不能创建目录。创建路径不存在的目录,用mkdirs()的方法,它创建目录以及该目录所有的父目录。3创建目录创建目录Return

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《Java语言程序设计实验指导》电子教案第10章.ppt
    链接地址:https://www.163wenku.com/p-3571632.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库