java编程――第6讲 输入输出流

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6讲输入/输出流下一页上一页返回开始文件、流和输入输出技术2主要内容6.1I/O流概述什么是流6.2I/O流类I/O流的层次:字符流、字节流、标准输入/输出流6.3过滤流与流的串接6.4文件流类与文件操作6.5对象串行化下一页上一页返回开始文件、流和输入输出技术36.1I/O流概述输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。Jdk提供了包java.io,其中包括一系列的类来实现输入/输出处理。进行I/O操作时可能会产生I/O例外,属于非运行时例外,应该在程序中处理。如:FileNotFoundException,EOFException,IOException下一页上一页返回开始什么是流文件、流和输入输出技术4“流”是数据从一种设备流向另一种设备的过程流实际上是一个数据序列。下一页上一页返回开始文件、流和输入输出技术5什么是流采用流的机制可以使数据有序地输入和输出。输入流与输出流。输入流数据input类数据源Java程序读输入流输出流数据output类接收器Java程序写输出流下一页上一页返回开始文件、流和输入输出技术66.2I/O流类Java有各种各样的执行I/O的流,在java.io包中定义了这些流编写程序时,java.io包必须被执行输入输出的程序导入。输入输出流可以从以下几个方面进行分类:从流的方向划分:输入流和输出流;从流的分工划分:节点流和处理流;从流的内容划分:面向字符的流和面向字节的流。下一页上一页返回开始文件、流和输入输出技术71字节流字节流类是从抽象类InputStream和OutputStream派生出来的一系列类。这两个类均为抽象类,也就是说它们不能被实例化,必须生成子类之后才能实现一定的功能。这类流以字节(byte)为基本处理单位。1.InputStreamInputStream类直接继承Object类。主要方法如下:下一页上一页返回开始文件、流和输入输出技术8从流中读取数据:intread();//读取一个字节,返回值为所读的字节intread(byteb[]);//读取多个字节,放置到字节数组b中,通常读取的字节数量为b的长度,返回值为实际读取的字节的数量intread(byteb[],intoff,intlen);//读取len个字节,放置到以下标off开始字节数组b中,返回值为实际读取的字节的数量intavailable();//返回值为流中尚未读取的字节的数量longskip(longn);//读指针跳过n个字节不读,返回值为实际跳过的字节数量下一页上一页返回开始文件、流和输入输出技术9关闭流:close();//流操作完毕后必须关闭使用输入流中的标记:voidmark(intreadlimit);//记录当前读指针所在位置,readlimit表示读指针读出readlimit个字节后所标记的指针位置才失效voidreset();//把读指针重新指向用mark方法所记录的位置booleanmarkSupported();//当前的流是否支持读指针的记录功能下一页上一页返回开始文件、流和输入输出技术102.OutputStream输出数据:voidwrite(intb);//往流中写一个字节bvoidwrite(byteb[]);//往流中写一个字节数组bvoidwrite(byteb[],intoff,intlen);//把字节数组b中从下标off开始,长度为len的字节写入流中flush()//刷空输出流,并输出所有被缓存的字节由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。关闭流:close();//流操作完毕后必须关闭下一页上一页返回开始在java.io包中定义了很多这二个基本类具体实现输入输出功能的子类,表8.1为部分常用字节输入流类和字节输出流子类的功能。类名功能FileInputStream和FileOutputStream文件流,实现在本地磁盘文件系统中的文件进行顺序读写操作。ByteArrayInputStream和ByteArrayOutputStream字节型数组流,实现与内存缓冲区的同步读写及对CPU寄存器的读写操作。ObjectInputStream和ObjectOutputStream对象流,将对象作为一个数据通过流进行传输和存储。FilterInputStream和FilterOutputStream过滤流,是一个抽象类。它们都有实现具体功能的子类。DataInputStream和DataOutputStream数据输入输出流,是过滤流的子类,实现独立于具体机器的带格式的读写操作。BufferedInputStream和BufferedOutputStream将数据读写到缓冲区,它们是过滤流的子类。表8.1部分常用字节输入流类和输出流类的功能文件、流和输入输出技术下一页上一页返回开始以FileInputStream与FileOutputStream为例12文件、流和输入输出技术下一页上一页返回开始文件、流和输入输出技术132字符流Java中的字符使用的是Unicode编码,每个字符占有两个字节,即16bit。字符流是以16位的Unicode码表示的字符为基本处理单位,进行文本数据的读写,可以实现Java程序中的内部格式和文本文件、显示输出、键盘输入等外部格式之间的转换。Reader和Writer是java.io包中所有字符流的抽象基类。提供了输出字符的API及其部分实现。1.ReaderReader类是处理所有字符流输入类的父类。主要有以下方法:下一页上一页返回开始文件、流和输入输出技术14读取字符publicintread()throwsIOException;/*读取一个字符,返回值为读取的字符*/publicintread(charcbuf[])throwsIOException;/*读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量*/publicabstractintread(charcbuf[],intoff,intlen)throwsIOException;/*读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现*/下一页上一页返回开始文件、流和输入输出技术15标记流publicbooleanmarkSupported();/*判断当前流是否支持做标记*/publicvoidmark(intreadAheadLimit)throwsIOException;/*给当前流作标记,最多支持readAheadLimit个字符的回溯。*/publicvoidreset()throwsIOException;/*将当前流重置到做标记处*/关闭流publicabstractvoidclose()throwsIOException;下一页上一页返回开始文件、流和输入输出技术162.Writer向输出流写入字符publicvoidwrite(intc)throwsIOException;//将整型值c的低16位写入输出流publicvoidwrite(charcbuf[])throwsIOException;//将字符数组cbuf[]写入输出流publicabstractvoidwrite(charcbuf[],intoff,intlen)throwsIOException;/*将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流*/publicvoidwrite(Stringstr)throwsIOException;//将字符串str中的字符写入输出流publicvoidwrite(Stringstr,intoff,intlen)throwsIOException;/*将字符串str中从索引off开始处的len个字符写入输出流*/下一页上一页返回开始文件、流和输入输出技术17flush()刷空输出流,并输出所有被缓存的字节。关闭流publicabstractvoidclose()throwsIOException;下一页上一页返回开始由于Reader和Writer是抽象类,因此,在java.io包中定义了许多这二个处理字符流基本类具体实现输入输出功能的子类,表8.2为部分常用字符输入流类和字符输出流子类的功能。类名功能BufferedReader和BufferedWriter用于字符流读写缓冲存储。InputStreamReader和OutputStreamWriter用于将字节码与字符码相互转换。FileReader和FileWriter用于字符文件的输入输出。表8.2部分常用字符输入流类和输出流类的功能下一页上一页返回开始文件、流和输入输出技术193.Reader与Writer的子类从Reader(直接子类6个)和Writer(直接子类7个)派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。◇FileReader、FileWriter◇InputStreamReader、OutputStreamWriter◇CharArrayReader、CharArrayWriter◇PipedReader、PipedWriter◇FilterReader、FilterWriter◇BufferedReader、BufferedWriter◇StringReader、StringWriter◇PrintWriter下一页上一页返回开始以FileReader与FileWriter为例20文件、流和输入输出技术下一页上一页返回开始文件、流和输入输出技术21标准输入/输出在Java应用程序开始执行时(也就是当main方法被执行时),Java就会自动创建3个与设备关联的流对象:System.in、System.out和System.err。System.in对象(标准输入流对象)是InputStream类型的,是连接程序与标准输入设备(通常是键盘)的一个输入流对象,当执行System.in.read()操作时,从键盘得到的信息通过System.in流到了程序中。System.out对象(标准输出流对象)是PrintStream类型的,是连接程序和标准输出设备(通常是显示器)的一个输出流对象,当执行System.out.println()语句时,信息流从程序通过System.out流到了屏幕上。下一页上一页返回开始标准输入/输出文件、流和输入输出技术22下一页上一页返回开始文件、流和输入输出技术23文件的操作步骤对于文件的操作也就是实现对文件的读写,而不管是文本文件还是二进制文件都可采用相同的步骤:1.把一个合适的流连接到文件;2.使用循环读或写数据;3.关闭流。下一页上一页返回开始文件、流和输入输出技术24File类File类主要用于获取磁盘中文件或目录的信息。File类的对象并不打开文件,也不提供任何文件处理功能。然而,java.io包中的其它类经常使用File对象来指定所要操作的文件或目录。File类的实例表示主机文件系统中的文件名或路径名。File类提供4个构造函数。publicFile(Stringname)/*指定与File对象关联的文件或目录的名称,name可以包含路径信息及文件或目录名*/publicFile(StringpathToName,Stringname)/*使用参数pathToName(绝对路径或相对路径)来定位参数name所指定的文件夹或目录*/publicFile(Filedirectory,Stringname)/*使用现有的File对象directory(绝对路径或相对路径)来定位参数name所指定的文件夹或目录*/pu

1 / 64
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功