第14章JavaIO系统.ppt_第1页
第14章JavaIO系统.ppt_第2页
第14章JavaIO系统.ppt_第3页
第14章JavaIO系统.ppt_第4页
第14章JavaIO系统.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第14章 Java I/O系统,信息输入和输出是Java程序设计语言中比较重要的部分,任何的系统都离不开信息的输入和输出。例如从键盘上读取数据,从一个文件中获取或者向这个文件中存入信息,显示器中显示键盘所输入的内容等等,这些都会涉及到信息的输入和输出。通常I/O系统分为字节流和字符流,字节流是用来处理字节、整数和其他简单的数据类型,字符流是用来处理文本文件和其他文本数据源。 文件 字节流InputStream、OutputStream 字符流Reader、Writer,14.1 I/O概述,输入和输出问题是程序设计中十分复杂的内容,面对这些问题,Java的解决方案是提出流的概念。不同的输入和输

2、出问题提供不同的流对象,输入和输出时通过数据流来实现,几乎所有的程序都需要使用到数据流。数据流就相当于向水池中输入或排出水的管道,中间的水池相当于数据信息存储设备。一个管子的水可以流入到水池中,这就是输入流,另一个管子可以将水排出池子,这就是输出流。当需要输入时,信息就可以通过管道流入存放信息的池子,需要输出时,存放程序的池子就可以通过管道畔涑龅匠绦蛑小,14.2 文件操作,在输入输出处理中,对于文件的读写,需要使用到java.io包中有关于文件处理的类,其中包括有File、FileInputStream、FileOutputStream、RamdomAccessFile和FileDescri

3、ptor;接口有FilenameFilter。,14.2.1 File类,学习如何读取和写入数据之前,首先需要了解一个文件操作的工具类File类,该类既可以处理数据文件也可以处理目录,并且通过该类可以列出File实例所代表的目录下所有的文件名。在处理一个目录之前,首先要做的就是创建一个File的实例用于表示该目录。,1. 文件或目录的生成,public File(String path):如果其中的参数是实际存在的路径,则该对象表示的是目录,而如果其中的参数path是文件名,则表示该File对象是文件。 public File(String path,String name):其中的参数pat

4、h表示的是路径名,而参数name则表示文件名。 public File(File dir,String name):其中的参数dir表示的是路径名,而参数name表示的则是文件名。,2. 文件名的处理,String getName( ):该方法用于得到一个文件的名称。但其中不包括路径。 String getPath( ):该方法用于得到一个文件的路径名。 String getAbsolutePath( ):该方法用于得到一个文件的绝对路径。 String getParent( ):该方法用于得到一个文件的上一级目录名称。 String renameTo(File newName):该方法用于将

5、当前的文件名更名为所指定的文件的完整路径。,3. 文件属性测试,boolean exists( ):该方法用于测试当前File对象所制定的文件是否存在,如果存在,则返回true,否则返回false。 boolean canWrite( ):测试当前的文件是否可写,如果可写,则返回true,否则返回false、 boolean canRead( ):该方法用于测试当前的文件是否可读。 boolean isFile( ):该方法用于测试当前的文件是否是文件而不是目录。如果是文件,则返回true,如果是目录,则返回false。,4. 普通文件信息和工具,long lastModified( ):该方

6、法用于得到文件最近一次修改的时间。 long length( ):该方法用于得到文件的长度,以字节为单位。 boolean delete( ):该方法用于删除当前文件。,5. 目录操作,boolean mkdir( ):该方法用于根据当前对象生成一个由该对象指定的路径。 String list( ):列出当前目录下的文件。该方法用于,14.2.2 File类应用,下面是一个演示File类方法使用的例子,该程序用于遍历文件夹下面文件,并且输出文件夹的信息,由于程序中使用了过滤器Filter,只读取java文件。,14.2.3 RandomAccessFile类,ReadomAccessFile类

7、是对随机访问文件的读取和写入。该随机访问文件类似于存储在文件系统中的一个庞大的byte数组,输入操作从该数组的开始读取字节,并随着对字节的读取而前移。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。,1. 构造方法,RandomAccessFile(String name,String mode):name是文件名,mode是打开方式,例如r表示只读,rw表示可读写。 RandomAcces

8、sFile(File file,String mode):file是文件对象。,2. 文件指针的操作,long getFilePointer( ):用于得到当前的文件指针。 void seek( long pos ):用于移动文件指针到指定的位置。 int skipBytes( int n ):使文件指针向前移动指定的n个字节。 为了保证移动存取位置的正确性,通常必须在随机文件读取之前固定每个数据的长度,例如固定为每一个雇员的数据大小,Java中并没有直接的方法取得固定长度的数据,必须自己计算获得。,14.2.4 RandomAccessFile应用,RandomAccessFile类在随机(

9、相对顺序而言)读写等长记录格式的文件时有很大的优势,如读取数据库中的某一条记录时。但是RandomAccessFile类仅限于操作文件,不能访问其他的IO设备,如网络,内存映象等。 (1) 在进行文件操作之前必须打开文件,并且需要指定文件的读写方式 (2) 写文件必须使用对应的写入方法。 (3) 读文件必须使用对应的读取方法。 (4) 读写完成之后关闭文件。,14.3 字节流InputStream、OutputStream,能够一次读取一个字节流的类是输入流,也就是InputStream。由于计算机中的数据都是以二进制的方式进行保存,而在两个不同的设备或者是环境之间,也是以二进制的方式进行保存

10、,也就是以0和1的方式保存。流在Java中就是数据源与目的地之间的数据流动抽象的抽象,Java中有字节流:InputStream和OutputStream。,14.3.1 字节输入、输出流,InputStream是字节输入流,也是所有字节输入流的超类,在它的派生类中必须要重新来定义字节输入流中所声明的抽象方法。其中有一些方法,例如read()方法,该方法是从输入流中来读取一个字节的内容,并且返回类型是整形。字节输入流中主要有以下常用方法。,1. 从流中读取数据,int read( ):作用是读取一个字节,并以整数字节。 int read( byte b ):作用是读取多个字节并放在节数组b中,

11、返回为数组长度。 int read( byte b , int off, int len ):作用是从字节数据的下标开始读取len个字节,返回值为实际读取字节数。 int available( ):作用是返回流中尚未读取的字节数。 long skip( long n ):作用是读指针跳过n个字节,并返回实际跳的长度。,2. 关闭流,close( ):该方法的作用是操作完毕,关闭流。 注意:在使用完流操作之后,一定要将流关闭,3. 使用输入流中的标记,void mark( int readlimit ):该方法作用是记录当前指针所在位置。 void reset( ):该方法作用是把读指针指向ma

12、rk标记的位置。 boolean markSupported( ):该方法作用是判断是否支持指针记录功能。,下面介绍输出流的内容。,1. 输出数据,void write( int b ):该方法作用是将整数写入流中。 void write( byte b ):该方法作用是将自己数据写入流中。 void write( byte b , int off, int len ):该方法作用是将字节数据从下标off开始,长度为len的数据写入流中。,2. 刷空输出流,flush( ):该方法作用是刷空输出流,并输出缓冲区的字节。,3. 关闭流,close( ):操作完毕,关闭流。 注意:通常情况下,由于

13、InputStream或OutputStream的方法都比较低级,所以很少直接使用,而是通过实现它们的子类,实现更高级的操作,使输入/输出更便捷。,14.3.2 字节文件输入、输出流,文件字节输入输出流是FileInputStream和FileOutStream,这是InputStream和OutputStream的子类。使用这两个类就可以将从一个指定的文件中读取或者向某一个文件中写入数据。 如果创建FileInputStream或者是FileOutputStream对象实例,必须要指定文件的路径和文件名,对象被创建之后,流就会被打开。程序的结尾如果不再使用流操作,必须要关闭流,以释放资源。,

14、14.3.3 字节缓冲输入、输出流,前面所使用的字节输入流和字节输出流是以字节为单位进行读写操作,这样一来,就使得文件流的效率变得非常低。这时就需要使用到缓冲输入流(BufferedInputStream)和缓冲输出流(BufferedOutputStream),当输入数据时,将数据存放到一个缓冲区中,当需要对数据进行读写时,就直接去访问缓冲区。当输入数据时,数据不会直接向输出流输出数据,而是先将数据写入缓冲区,当缓冲区中的数据满时,才会将缓冲区中的数据写入输出流中,这样一来就大大提高了输入输出操作的效率。,14.3.4 字节数据输入、输出流,在流操作中,还有专门针对于Java基本数据类型的写

15、入和读取的操作,分别是字节数据输入流java.io.DataInputStream和字节数据输出流java.io.DataOutputStream,使用字节数据流进行基本的写入读取操作时,可以不必担心不同平台之间数据大小差异的问题,因为Java的数据类型所占用空间的大小都是有规定的。,14.3.5 字节对象输入、输出流,字节对象输入、输出流也就是对象序列化,对象序列化就是指将继承了Serializable接口的类的实例转换成一个字节序列,并且可以将其存储在永久性存储介质中。在需要的时候可以将其从存储介质中取出并还原成具体的示例来进行使用。Java提供了字节对象输入流java.io.Object

16、InputStream和字节对象输出流java.io.ObjectOutputStream来实现这样的操作。 类ObjectOutputStream负责将对象序列化,而类ObjectInputStream则负责将序列化的对象还原。而序列化时,首先是要选择一个要存放文件的路径,因此还需要建立一个FileOutputStream实例,并且要作为参数传入ObjectOutputStream。,14.4 字符流Reader、Writer,字符输入输出流式Reader和Writer,Reader类是字符输入流的基类,其中包括有FileReader、BufferedReader等子类。Writer是字符输

17、出流的基类。使用Reader和Writer对流数据的操作时以一个字符的长度为单位进行处理,而且可以进行字符的编码处理。,14.4.1 字符读、写流,字符流支持Unicode标准字符集,如果进行文本读写,通常要使用Reader和Writer的子类时要重新定义相关的方法。而Reader和Writer只提供了用于字符流处理的接口,而不能生成实例。只可以通过他们的子类对象来处理字符流。,1. 字符读流Reader抽象类,Reader是Java语言中字符输入流所有类的父类,该类是抽象类,不能被实例化。如下是Reader中定义了很多与读取字符串相关的方法。 public int read():读取一个字符

18、,并返回该字符。 public int read(char cbuf):读取一系列字符数组,返回字符数组长度。 public abstract int read(char cbuf,int off,int len):读取从下标off开始,长度为len的字符保存到字符数组中,返回实际读取字符数。 public boolean markSupported():判断流是否支持标记。 。,2. 字符写流Writer抽象类,Writer是Java语言中字符输出流所有类的父类,该类是抽象类,不能被实例化。如下是Writer与读取字符串相关的方法。 public void write(int c):将整型数据的低14位写入输出流。 public void write(char cbuf):将字符数组cbuf写入输出流。 public abstract void write(char cbuf,int off,int len):将字符数组从索引off开始的len个字符写入输出流。 public void write(String str):将字符串的字符写入输出流。 public void write(String str,int off,int len):将字符串的索引off开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论