Java语言程序设计-输入输出处理.ppt_第1页
Java语言程序设计-输入输出处理.ppt_第2页
Java语言程序设计-输入输出处理.ppt_第3页
Java语言程序设计-输入输出处理.ppt_第4页
Java语言程序设计-输入输出处理.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计 主讲教师:周立波 第7章 输入/输出处理 7.1 输入/输出基础 7.1.1 输入/输出概述 在Java类库中,IO部分包含:标准输入/输出 ,文件的操作,网络上的数据流,字符串流, 对象流,管道流,zip文件流等。 7.1.2 流的概念 1、流的概念 2、输入流与输出流 输出流:将数据资源从应用程序传递到外设 、外存等的流,称为输出流(OutputStream) 输入流:将数据资源从外设或外存传递到应用程 序的流称为输入流。(InputStream) 3. 字节流与字符流 按照处理对象的不同,又可将流分成字节流和 字符流两种。 字节流(byte stream):为处理字节的输入 和输出提供了方便的方法。 字符流(character stream):为字符的输 入和输出处理提供了方便。 InputStream类和OutputStream类本身属 于字节流的范围。相对应的字符流在Java输入/ 输出类库中有两个抽象类:Reader和Writer 7.1.3 Java中I/O处理的类库层次 综合考虑“输入流/输出流”和“字节流/字符 流” 不同的分类方法,Java的流可以由四个抽象 类来表示: InputStream,OutputStream,Reader,Writer。Java中 其他多种多样变化的流均是由它们派生的. 1.InputStream类 1)InputStream类的方法 (1)三个基本的read( )方法 int read( ); int read(byte ); int read(byte ,int off,int len); (2)其他方法 void close():完成流操作后,使用该方法关闭流。 int available():报告立刻可以从流中读取的字节数。 skip(long):丢弃流中制定数目的字节。 boolean markSupported(); void reset(int); Void mark(int); 这三个方法用于支持流的“回放”(回读)操作。 2)InputStream类的派生类 FileInputStream:用于文件系统的输入。 PipeInputStream:用于进行管道方式的输入。 FilterInputStream:过滤流的接口。 2. OutputStream类 1)OutputStream类的方法介绍 (1)三个基本的write()方法 void write(int); void write(byte ); void write(byte ,int,int); (2)其他方法 void close():完成写操作后,关闭流的方法。 void flush():该方法允许强制执行写操作。 2)OutputStream类的派生类 FileOutputStream:用于文件系统的输出。 PipedOutputStream:用于管道方式的输出。 FilterOutputStream:为过滤流提供了统一的接口 ,使得在数据输出时进行数据处理。 ByteArrayOutputStream:用于向内存写数据。 ObjectOutputStream:用于对象操作序列化的输出 流类。 BufferedOutputStream:在进行数据写出时将数据 保存在数据缓冲区,以提高写出速度。 3.Reader类 Reader类是基于字符流处理的输入流类。 4.Writer类 Writer类是基于字符流处理的输出流类。 7.1.4 节点流和过滤流 根据流相对于程序的另一个端点的不同,可以分 为节点流和过滤流。 节点流:以特定源,比如磁盘文件、内存区域等 之间的管道为端点构造的I/0流称为节点流。 过滤流:以其他已经存在的流为端点构造的I/O 流称为过滤流。 7.1.5 输入/输出流的套接 一般通过过滤流将多个流套接在一起,利用各种 流的特性共同处理数据流。套接的多个流就构成了 一个流链。 7.1.6 常用的输入/输出流 1.文件流 FileInputStream/FileOutputStream, FileReader/FileWriter (1).FileInputStream FileInputStream类是为了处理来源于文件的 面向字节输入而设计的类,它是由InputStream 类派生而来的。 构造方法: FileInputStream(File file); FileInputStream(FileDescriptor fdObj); FileInputStream(String name); 公有方法 int available():获取可以从文件流中读取的字 节数目。 void close():关闭该文件流。 int read():从文件流读取一个字节的数据。 int read(byte b):从文件流读取b.length字 节的数据到一个字节数组中。 int read(byte b,int off,int len):从文件流 读取len字节的数据到一个字节数组中。 long skip(long n):略过并舍弃n个字节的数据 。 FileInputStream类的示例 例1:读取文件全部内容 例2:读取文件部分内容 例3:读取时跳过文件部分内容 (2)FileOutputStream类 在Java中,文件的写入可以通过FileOutputStream 类的方法实现,用户可以利用该类一个字节一个字 节地将数据写入文件。 构造方法 FileOutputStream(File file), FileOutputStream(FileDescriptor fdObj), FileOutputStream(String name), FileOutputStream(String name,boolean append) 常用方法 void close():关闭输出流。 protected void finalize():确认该输出流没有任 何引用的时候调用close方法。 void write(byte b):从指定字节数组写入输出 流。 void write(byte b,int off,int len)从指定字节 数组写入指定字符到输出流。 void write(int b):写入指定的字节到输出流。 (3)文件字符流(FileReader类和FileWriter类) FileReader类创建一个可以读取文件内容的Reader类 。 FileWriter创建一个可以写文件的Writer类。 例子:通过文件字符流实现文本的复制 2.缓存流 缓存流包括BufferedReader/BufferedWriter类 和BufferedInputStream/BufferedOutputStream类 缓存流把数据从原始流成块读入或把数据积累到一个大 数据块后再成批写出,通过减少系统资源的读写次数来加 快程序的执行。 【注】BufferedOutputStream和BufferedWriter类 仅仅在缓冲区满或调用flush()方法时才将数据写出。 缓存流是过滤流,在创建具体缓存流时, 需要给出一个InputStream/OutputStream类 型的流作为前端流,并可以指明缓冲区的大 小。 例如,InputStream类的构造方法: public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in,int size) BufferedReader类中增加了一个有用的方法 readLine(),该方法读一行字符返回。 3.管道流 管道流可以实现线程间数据的直接传输。 4.数据流 数据流包括DataInputStream/DataOutputStream 类,它们允许按Java的基本数据类型读写流中的数 据。这两个类中提供了很多读写基本数据类型的方 法。 5.标准输入/输出 Java在System类中定义了与系统标准输入/输 出相关联的三个流,它们是: System.in,System.out,System.err。 System类是Java中一个功能很强大的类,利用 它可以获得Java运行时的系统信息,System类的 所有变量和方法都是static。 System.in:标准输入流。 这个流在程序运行时一直打开并准备好提供输入 的数据。该流一般对应于键盘的输入。 System.out:标准输出流。 这个流在程序运行时一直打开并准备好接收输出 的数据。该流一般对应于屏幕。 System.err:标准错误输出流。 这个流在程序运行时一直打开并准备好接收输出 的数据。该流一般对应于屏幕并且用来显示错误消 息。 (1)标准输入(System.in) 用System.in的read()方法接受从键盘读入的 数据。也可以在System.in上套接其他过滤流。 这样可以使用更方便的方法从标准输入流上读取 数据。 【注】 必须使用try-catch对System.in.read()可能抛 出的IOException类型的异常进行处理。 执行System.in.read()方法将从键盘缓冲区读入 一个字节的数据,但返回的是16位的整型值,该 整型值只有低位字节是真正输入的数据,高位字 节全部是零。 (2)标准输出(System.out) 标准输出是打印输出流PrintStream类 的对象。PrintStream是一种过滤流,它定 义了屏幕上显示不同类型数据的方法 print(),println()。 【增】字节流与字符流的转换 InputStreamReader类和OutputStreamWriter 类是字节流和字符流之间转换的类。前者可以将一 个字节流中的字节码解码成字符,后者将写入的字 符编码成字节后写入到一个字节流。 InputStreamReader有两个主要的构造函数: : nInputStreamReader(InputStream in) /用默认的字符集创建一个对象。 InputStreamReader(InputStream in,String charsetName) /接受以指定字符集名的字符创,并用该字符集创 建对象。 为了达到最好的效率,避免频繁进行字符与字 节间的相互转换,最好不用这两个类来进行读写 ,应尽量使用BufferedWriter类包装 OutputStreamWriter类,用BufferedReader类 包装InputStreamReader类。 n包装方法: nBufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out); nBufferedReader in=new BufferedReader(new OutputStreamReader(System.in); 7.2 文件和目录管理 在Java中文件的处理被统一到了流处 理,但有些操作无法通过流的方式完成, 而要通过File类。 File类直接处理文件和文件系统。它用 来操纵文件和获取文件的信息,但不提供 对文件数据读取的方法,这些方法由文件 流提供。 7.2.1创建File类的对象 File类的构造方法: (1) public File(String pathname) 参数pathname指定新创建的File对象对应的磁 盘文件或目录名及其路径名。 (2)public File(String parent,String child) 参数parent指定了文件或目录的父目录的绝对 或相对路径,参数child指定了文件或目录名。 将路径与名称分开的好处是相同路径的文件或 目录可以共享同一个路径字符串,便于管理和修改 . (3)public File(File parent,String child) 参数parent是已经存在的代表文件或父目录的 File类对象,参数child表示文件或目录名。 7.2.2 操纵File对象 1.文件名的操作 getName():获取该文件的名字。 getAbsolutePath():获取抽象的路径名的绝对字 符串。 getPath():获取该文件的路径。 renameTo(File f):将文件重命名为f所对应的文件 名。 2.文件信息测试 isAbsolute():测试文件是否用绝对路径名来表示。 canRead():测试程序是否能从该文件读。 canWrite():测试程序是否能够对文件写操作。 exists():判断文件是否存在。 isDirectory():判断一个文件是否是目录。 isFile():判断一个文件是否是文件。 3.获取文件一般信息与常用操作 length():返回该文件的长度,以byte为单位。 lastModified():返回文件最后被修改的时间。 delete():删除文件或目录。 4.目录操作 String list():如果该文件是一个目录,返回该目录 下所有文件名的列表。 mkdir():建立一个目录,该目录由File对象表示。 7.3 随机存取文件 7.3.1 RandomAccessFile类概述 Java中使用RandomAccessFile类实现对文件 内容的随机读写操作。同I/O流类相比,它最大的 区别是该类既可以对文件进行读操作,也可以对文 件进行写操作,并提供了比较全面的数据读写方法 。 7.3.2 随机存取文件的创建 RandomAccessFile 类的构造方法: public RandomAccessFile(String name,String mode) throws FileNotFoundException public RandomAccessFile(File file,String mode) throws FileNotFoundException 参数mode规定了RandomAccessFile对象可以 用何种方式打开和访问指定的文件。Mode有四种取 值:”r”,”rw”,”rwd”,”rws”. r-以只读方式打开文件; rw-以读写方式打开文件; rwd-以读写方式打开文件,并且要求对文件内容 的更新要同步地写到底层存储设备; rws-与rwd基本相同,但还可以更新文件的元数 据(metaData)。 7.3.3 随机存取文件的操作 1.文件指针的操作 若要在文件的任意位置进行数据的读写,必须定 义文件指针或称为文件位置指针,以及移动这个指 针的方法。 文件指针是指以字节为单位的相对于文件开头的偏 移量,是下次读、写的起点。 RandomAccessFile类的文件指针操作方法: long getFilePointer():返回当前文件指针,既从文 件开头算起的绝对位置。 void seek(long pos):将文件指针定位到指定位置。 long lenth():返回文件长度。 int skipByt

温馨提示

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

评论

0/150

提交评论