输入输出设计ppt课件_第1页
输入输出设计ppt课件_第2页
输入输出设计ppt课件_第3页
输入输出设计ppt课件_第4页
输入输出设计ppt课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第七章 输入/输出 流式I/O基础 文件 随机存取文件 对象输入/输出流 1 File类 z一个File类的对象,表示了磁盘上的文件或 目录。 zFile类提供了与平台无关的方法来对磁盘上 的文件或目录进行操作。 2 文件 Java.io.File 文件类提供获取文件基本信息,以及 其它与文件相关的操作。 创建新的文件对象: File myFile; myFile=new File(“mymotd”); myFile = new File(“”,”mymotd”); 3 流Stream的概念 流(Stream)是字节的源或目的,从源到目的的字节的有序序 列,先进先出。 两种基本流: Input stream(输入流),Output stream(输出流 ) 4 流操作的过程 输入流(Input Stream)可 从中读出一系列字节 的对象称为输入流。 Reading: open a stream while more information read information close the stream 输出流(Output Stream)能 向其中写入一系列字节的 对象称为输出流。 Writing : open a stream while more information write information close the stream 5 两种结构的流 Node Stream(节点流) :从特定源地方读写的 流类,如磁盘文件或内存某区域进行读或写入。 Filter Steam(过滤流):使用已经存在的输入流 或输出流连接创建。使用节点流作为输入或输出 。 6 两种流类的体系(字节流与字符流) Java.io包中包含了流式I/O所需要的所有类。 流式I/O类根据操作的数据类型(16位字符或字 节)分成两个层次体系。 7 字节流输入流类层次 InputStream StringBufferInputStream FileInputStream ByteArrayInputStream FilterInputStream ObjectInputStream PipedInputStream SequenceInputStream LineNumberInputStream DataInputStream BufferedInputStream PushbackInputStream java.io包中 InputStream的类层次 8 InputStream字节流的方法 三个基本read()方法 int read() :读取一个字节数据,并返回读到的数据,读取一个字节数据,并返回读到的数据, 如果返回如果返回-1-1,表示读到了输入流的末尾。,表示读到了输入流的末尾。 int read(byte ) :将数据读入一个字节数组,同时返将数据读入一个字节数组,同时返 回实际读取的字节数。如果返回回实际读取的字节数。如果返回-1-1,表示读到了输入流的末尾。,表示读到了输入流的末尾。 int read( byte, int offset, int length ):将数据读入一个字节将数据读入一个字节 数组,同时返回实际读取的字节数。如果返回数组,同时返回实际读取的字节数。如果返回-1-1,表示读到了输入,表示读到了输入 流的末尾。流的末尾。offoff指定在数组指定在数组b b中存放数据的起始偏移位置;中存放数据的起始偏移位置;lenlen指定读指定读 取的最大字节数。取的最大字节数。 其它方法 void close( ) /关闭流。自顶向下关闭关闭流。自顶向下关闭Filter streamFilter stream int available() /返回在不发生阻塞的情况下,未读的字节数返回在不发生阻塞的情况下,未读的字节数 long skip(long n) / 跳过跳过n n个字节个字节 void mark(int) /标记当前流,并建立标记当前流,并建立intint大小缓冲区大小缓冲区 void reset( ) / 返回标签出返回标签出 9 字节流输出流类层次 OutputStream FileOutputStream ByteArrayOutputStream FilterOutputStream ObjectOutputStream PipedOutputStream PrintStreamPrintStream DataOutputStream BufferedOutputStream java.io包中 OutputStream的类层次 10 OutputStream字节流方法 三个基本的write( )方法 void write( int ) / 写一个字节 void write(byte ) / 写一个字节数组 void write(byte , int offset, int length ) 其它方法 void flush( ) :刷新输出流,强制缓冲区中的输出字节被写出。刷新输出流,强制缓冲区中的输出字节被写出。 void close( ) :关闭输出流,释放和这个流相关的系统资源。关闭输出流,释放和这个流相关的系统资源。 11 基本的字节流类 FileInputStream和FileOutputStream 节点流,用于从文件中读取或往文件中写入字节流。如果在构造 FileOutputStream时,文件已经存在,则覆盖这个文件。 BufferedInputStream和BufferedOutputStream 过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提 高了读写的效率。 DataInputStream和DataOutputStream 过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的 基本数据类型的功能。 PipedInputStream和PipedOutputStream 管道流,用于线程间的通信。一个线程的PipedInputStream对象 从另一个线程的PipedOutputStream对象读取输入。要使管道流有 用,必须同时构造管道输入流和管道输出流。 12 FileInputStream,FileOutputStream文件流 文件流类包括:FileInputStream,FileOutputStream 创建文件流:常用文件名或File类的对象创建文件流。 例:CopyBytes.java,利用FileInputStream,FileOutputStream。 13 是过滤流。 数据从原始流成块读入或将数据积累到 一个大数据块后再成批输出。 基本方法: int read() int read( byte, int offset, int length ) int write(int c) void write(byte , int offset, int length ) BufferedReader增加readLine( ) 方法。 BufferedInputStream/BufferedOutputStream 14 DataInputStream和DataOutputStream(Filter stream) 读写基本数据类型: DataInputStream方法 byte readByte( )boolean readBoolean( ) long readLong( )char readChar( ) double readDouble( )float readFloat( ) short readshort( )int readInt( ) DataOutputStream 方法 void writeByte(byte)void writeBoolean(boolean) void writeLong( long )void writeChar(char) void writeDouble(double)void writeFloat( float) void writeshort(short)void writeInt ( int) void writeBytes(String)void writeChars(String ) DataInputStream/DataOutputStream 15 示例 /example of using inputData public class DataIOTest public static void main(String args) throws IOException / write the data out DataOutputStream out = new DataOutputStream(new FileOutputStream(“invoice1.txt“); double prices = 19.99, 9.99, 15.99, 3.99, 4.99 ; int units = 12, 8, 13, 29, 50 ; String descs = “Java T-shirt“, “Java Mug“, “Duke Juggling Dolls“, “Java Pin“, “Java Key Chain“ ; 16 for (int i = 0; i prices.length; i +) out.writeDouble(pricesi); out.writeChar(t); out.writeInt(unitsi); out.writeChar(t); out.writeChars(descsi); out.writeChar(n); out.close(); / read it in again DataInputStream in = new DataInputStream(new FileInputStream(“invoice1.txt“); double price; int unit; String desc; double total = 0.0; 17 try while (true) price = in.readDouble(); in.readChar(); / throws out the tab unit = in.readInt(); in.readChar(); / throws out the tab desc = in.readLine(); System.out.println(“Youve ordered “ + unit + “ units of “ + desc + “ at $“ + price); total = total + unit * price; catch (EOFException e) System.out.println(“For a TOTAL of: $“ + total); in.close(); Youve ordered 12 units of Java T-shirt at $19.99 Youve ordered 8 units of Java Mug at $9.99 Youve ordered 13 units of Duke Juggling Dolls at $15.99 Youve ordered 29 units of Java Pin at $3.99 Youve ordered 50 units of Java Key Chain at $4.99 For a TOTAL of: $892.88 18 管道流 管道用来把一个线程的输出连接到另一个线程的输入。 PipedReader/PipedInputStream实现管道的输入端; PipedWriter/PipedOutputStream实现管道的输出端。 管道流模型: 管道输入管道输出管道输入 线程1 连接 线程2 线程3 连接 管道输出 19 将一个线程的输出流直接挂在另一个线程的输入流, 建立管道,实现线程间数据交换。 PipedInputStream pin= new PipedInputStream( ); PipedOutputStream pout = new PipedOutputStream(pin); PipedInputStream pin= new PipedInputStream( ); PipedOutputStream pout = new PipedOutputStream(); pin.connect(pout);或pout.connect(pin)。 管道流的创建 20 管道流示例 Rhymingwords.java,输入一组单词,先将每个单词逆序, 再将所有单词排序,最后将这些单词逆序输出。 程序处理流程: 21 示例中的管道流 22 Java I/O库的设计原则 Java的I/O库提供了一个称做链接的机制,可以将一 个流与另一个流首尾相接,形成一个流管道的链接 。这种机制实际上是一种被称为Decorator(装饰)设 计模式的应用。 通过流的链接,可以动态的增加流的功能,而这种 功能的增加是通过组合一些流的基本功能而动态获 取的。 我们要获取一个I/O对象,往往需要产生多个I/O对 象,这也是Java I/O库不太容易掌握的原因,但在 I/O库中Decorator模式的运用,给我们提供了实现上 的灵活性。 23 I/O流的链接 FileInputStreamBufferedInputStreamDataInputStream 数据 DataOutputStreamBufferedOutputStreamFileOutputStream数据 从文件中获取输入字节增加了缓冲的功能 增加了读取Java基 本数据类型的功能 Input Stream Chain Output Stream Chain 可以往输出流中写入 Java基本数据类型 提供数据写入到缓冲 区的功能 将数据写入到文件中 24 字符流 Reader和Writer是字符流的两个抽象超 类。 Reader和Writer 类实现字节和字符间的自 动转换。 每一个核心输入、输出流,都有相应的 Reader和Writer版本。 25 Reader的类层次 Reader BufferedReader CharArrayReader FilterReader PipedReader StringReader FileReader LineNumberReader PushbackReader InputStreamReader 26 Reader的基本方法 int read();/读单个字符 int readLine();/读一行的字符数据 int read(char cbuf, int offset, int length); /读字符放入数组的指定位置 void close( ) /关闭流。 long skip(long n) / 跳过n个字符 boolean markSupported( ) /测试打开的流是否支持书签 void mark(int) /标记当前流,并建立int大小缓冲区 void reset( ) / 返回标签出 boolean ready() /测试当前流是否准备好进行读 27 Writer的类层次 Writer BufferedWriter CharArrayWriter FilterWriter PipedWriter PrintWriter FileWriter OutputStreamWriter StringWriter 28 Writer的基本方法 int write(int c) ; / 写单个字符 int write(char cbuf) ;/ 写字符数组 int write(char cbuf, int offset, int length) ; int write(String str) ; int write(String str, int offset, int length) ; void close( ) void flush( ) / 强行写 29 字节流与字符流的比较 Reader 和 InputStream以及Writer 与 OutputStream定 义的API类似,但操作的数据类型不同。 所有的流InputStream、 OutputStream 、Reader、 Writer 在创建时自动打开;程序中可以调用close方法关闭 流,否则Java运行环境的垃圾收集器将隐含将流关闭。 30 I/O Streams Type of I/OStreamsDescription Memory CharArrayReader CharArrayWriter ByteArrayInputStream ByteArrayOutputStream 从/向内存数组读组读 写数据. StringReader StringWriter StringBufferInputStream 从/向内存字符串读读写数据 Pipe PipedReader PipedWriter PipedInputStream PipedOutputStream 实现实现 管道的输输入和输输出 File FileReader FileWriter FileInputStream FileOutputStream 统统称为为文件流。对对文件进进行 读读、写操作 31 I/O Streams Type of I/OStreamsDescription Object Serialization ObjectInputStream ObjectOutputStream 对对象的输输入、输输出 Data Conversion DataInputStream DataOutputStream 读读、写基本数据类类型 Printing PrintWriter PrintStream 包含方便的打印方法 Buffering BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 在读读入或写出时时,对对数据进进 行缓缓存,以减少I/O的次数 。 32 I/O Streams Type of I/OStreamsDescription Filtering FilterReader FilterWriter FilterInputStream FilterOutputStream 过滤过滤 流,在数据进进行读读或写时时 进进行过滤过滤 。 Concatenation SequenceInputStream 把多个输输入流连连接成一个输输入 流 Counting LineNumberReader LineNumberInputStream 在读读入数据时对时对 行记记数 Peeking Ahead PushbackReader PushbackInputStream 通过缓过缓 存机制,进进行预读预读 Converting between Bytes and Characters InputStreamReader OutputStreamWriter 按照一定的编码编码 /解码标码标 准将 字节节流转换为转换为 字符流,或进进行 反向转换转换 。 33 文件测试与实用方法 文件名 String getName( ) String getPath( ) String getAbsolutePath( ) String getParent( ) boolean renameTo( File newName) 文件测试 boolean exists( ) boolean canWrite( ) boolean canRead( ) boolean isFile( ) boolean isDirectory( ) boolean isAbsolute( ) 34 随机存取文件 例:从zip文件中读取特定文件 35 随机存取文件类-RandomAccessFile 创建随机存取文件: myRAFile = new RandomAccessFile(String name, String mode); myRAFile = new RandomAccessFile(File file, String mode); 常用的方法: 数据读写方法; long getFilePointer( ); /返回当前文件指针 void seek( long pos ); / 文件指针定位到指定位置 long length( ); / 返回文件长度 “r”,”w

温馨提示

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

评论

0/150

提交评论