第7章 输入输出_第1页
第7章 输入输出_第2页
第7章 输入输出_第3页
第7章 输入输出_第4页
第7章 输入输出_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第7章章 输入输入/输出输出流式流式I/O基础基础文件文件随机存取文件随机存取文件对象输入对象输入/输出流输出流2流流Stream的概念的概念是从源到目的的字节的有序序列,先进先出。是从源到目的的字节的有序序列,先进先出。两种基本流:两种基本流:Input stream(输入流)(输入流),Output stream(输出流)(输出流)3Writing :open a streamwhile more information write informationclose the stream4l l e HoNode InputStreamFilter InputStreamread()5

2、字节流:流中的数据以字节流:流中的数据以8位字节为单位进行读写,以位字节为单位进行读写,以InputStream与与OutputStream为基础类。为基础类。字符流:流中的数据以字符流:流中的数据以16位字节为单位进行读写,以位字节为单位进行读写,以Reader与与Writer为基础类。为基础类。Java中的流常指的是字节流。中的流常指的是字节流。6InputStream和和OutputStream是字节流的两个顶层父类。它是字节流的两个顶层父类。它们提供了输入流类和输出流类的能用们提供了输入流类和输出流类的能用API。7字节流字节流输入流类层次输入流类层次带阴影的类是节点流,其它类是过滤流

3、带阴影的类是节点流,其它类是过滤流8InputStream 方法方法三个基本三个基本read()方法方法int read()/读一个字节返回读一个字节返回int read(byte ) / 将数据读入将数据读入byte, 返回读的字节数返回读的字节数int read( byte , int offset, int length ) /将读入的数据放将读入的数据放入一个字节数组中,并返回所读字节数。两个整形参数表示所读入一个字节数组中,并返回所读字节数。两个整形参数表示所读入数据在数组入数据在数组b中的存放位置。中的存放位置。其它方法其它方法void close( ) /关闭流。自顶向下关闭关闭

4、流。自顶向下关闭Filter streamint available() /返回未读的字节数返回未读的字节数long skip(long n) / 跳过跳过n个字节个字节 流的回读方法流的回读方法 boolean markSupported( ) /测试打开的流是否支持书签测试打开的流是否支持书签void mark(int readlimt) /标记当前流,并建立标记当前流,并建立readlimt大大 小的缓冲区小的缓冲区void reset( ) / 返回到标签出返回到标签出 9字节流字节流输出流类层次输出流类层次带阴影的类是节点流,其它类是过滤流带阴影的类是节点流,其它类是过滤流10Out

5、putStream方法方法三个基本的三个基本的write( )方法方法void write( int ) / 写一个字节写一个字节void write(byte ) / 写一个字节数组写一个字节数组void write(byte , int offset, int length ) 其它方法其它方法void close( ) void flush( ) / 强行写强行写一般在调用一般在调用close( )方法关闭流前,可以先调用方法关闭流前,可以先调用flush( )方法方法11字符流字符流 Reader和和Writer是字符流的两个顶层抽象超类。是字符流的两个顶层抽象超类。 Reader和和

6、Writer 类实现字节和字符间的自动转换。类实现字节和字符间的自动转换。每一个核心输入、输出流,都有相应的每一个核心输入、输出流,都有相应的Reader和和Writer版本。版本。12ReaderReader的类层次的类层次带阴影的类是节点流,其它类是过滤流带阴影的类是节点流,其它类是过滤流13ReaderReader的基本方法的基本方法intint read() read();/ /读单个字符读单个字符int read(char cbufint read(char cbuf);/ /读字符放入数组中读字符放入数组中int read(char cbuf, int offset, intint

7、 read(char cbuf, int offset, int length) length);/ /读字符放入数组的指定位置读字符放入数组的指定位置 void close( ) /关闭流。关闭流。long skip(long n) / 跳过跳过n个字符个字符boolean markSupported( ) /测试打开的流是否支持书签测试打开的流是否支持书签void mark(int) /标记当前流,并建立标记当前流,并建立int大小缓冲区大小缓冲区void reset( ) / 返回标签出返回标签出 boolean ready() /测试当前流是否准备好进行读测试当前流是否准备好进行读14

8、WriterWriter的类层次的类层次带阴影的类是节点流,其它类是过滤流带阴影的类是节点流,其它类是过滤流15WriterWriter的基本方法的基本方法int write(intint write(int c) ; / c) ; / 写单个字符写单个字符int write(char cbufint write(char cbuf) ;/ ) ;/ 写字符数组写字符数组int write(char cbuf, int offset, intint write(char cbuf, int offset, int length) ; length) ; int write(String str

9、int write(String str) ;) ;int write(String str, int offset, intint write(String str, int offset, int length) ; length) ;void close( ) /关闭流关闭流void flush( ) / 强行写强行写16字节流与字符流的比较字节流与字符流的比较 Reader Reader 和和 InputStreamInputStream以及以及Writer Writer 与与 OutputStream定定义的义的API类似,但操作的数据类型不同。类似,但操作的数据类型不同。所有的流所

10、有的流InputStreamInputStream、 OutputStream 、ReaderReader、 Writer Writer 在创建时自动打开;程序中可以调用在创建时自动打开;程序中可以调用closeclose方法关闭方法关闭流,否则流,否则JavaJava运行环境的垃圾收集器将隐含将流关闭。运行环境的垃圾收集器将隐含将流关闭。17181920文件流文件流文件流类包括:文件流类包括:FileReader,FileWriter,FileInputStream,FileOutputStream创建文件流:常用文件名或创建文件流:常用文件名或File类的对象创建文件流。类的对象创建文件流

11、。例:例: 通过文件字节流实现文件复制通过文件字节流实现文件复制 CopyBytes.java,利用,利用FileInputStream,FileOutputStream。 通过文件字符流实现文件复制通过文件字符流实现文件复制 Copy.java ,利用,利用FileReader, FileWriter, 将将farrago.txt的内容拷贝到的内容拷贝到outagain.txt中。中。21管道流管道流管道用来把一个线程的输出连接到另一个线程的输入。管道用来把一个线程的输出连接到另一个线程的输入。 PipedReader/PipedInputStream实现管道的输入端;实现管道的输入端; P

12、ipedWriter/PipedOutputStream实现管道的输出端。实现管道的输出端。管道流模型:管道流模型:管道输入管道输出管道输入线程1连接线程2线程3连接管道输出22将一个线程的输出流直接挂在另一个线程的输入流,建立管将一个线程的输出流直接挂在另一个线程的输入流,建立管道,实现线程间数据交换。道,实现线程间数据交换。PipedInputStream pin= new PipedInputStream( );PipedOutputStream pout = new PipedOutputStream(pin);或:或:PipedInputStream pin= new PipedIn

13、putStream( );PipedOutputStream pout = new PipedOutputStream();pin.connect(pout); 或或pout.connect(pin)。管道流的创建管道流的创建23管道流示例管道流示例Rhymingwords.java,输入一组单词,先将每个单词逆序,输入一组单词,先将每个单词逆序,再将所有单词排序,最后将这些单词逆序输出。再将所有单词排序,最后将这些单词逆序输出。程序处理流程:程序处理流程:24示例中的管道流示例中的管道流例例7325是过滤流。是过滤流。 数据从原始流成块读入或将数据积累到数据从原始流成块读入或将数据积累到一个

14、大数据块后再成批输出。一个大数据块后再成批输出。基本方法:基本方法:int read()int read( byte, int offset, int length )int write(intint write(int c) c)void write(byte , int offset, int length )BufferedReader增加增加readLine( ) 方法。方法。BufferedInputStream/BufferedOutputStream26 DataInputStream和和DataOutputStream(Filter stream)读写基本数据类型:读写基本数据

15、类型: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(doubl

16、e)void writeFloat( float) void writeShort(short)void writeInt ( int) void writeBytes(String)void writeChars(String )DataInputStream/DataOutputStream数据流数据流27示例示例/example of using inputData & outputData/example of using inputData & outputData/DataIOTeat.java/DataIOTeat.javaimport java.ioimport

17、 java.io. .* *; ;public class DataIOTestpublic class DataIOTest public static void main(String public static void main(String args args) ) throws IOExceptionthrows IOException / write the data out / write the data out DataOutputStream out = new DataOutputStream DataOutputStream out = new DataOutputS

18、tream( ( new FileOutputStream(invoice1.txt); new FileOutputStream(invoice1.txt); double prices = 19.99, 9.99, 15.99, 3.99, 4.99 ; double prices = 19.99, 9.99, 15.99, 3.99, 4.99 ; int int units = 12, 8, 13, 29, 50 ; units = 12, 8, 13, 29, 50 ; String descs String descs = Java T-shirt, = Java T-shirt,

19、 Java Mug, Java Mug, Duke Juggling Dolls, Duke Juggling Dolls, Java Pin, Java Pin, Java Key Chain ; Java Key Chain ; 28 for (int for (int i = 0; i prices.length; i +) i = 0; i prices.length; i +) out.writeDouble(pricesi out.writeDouble(pricesi);); out.writeChar(t out.writeChar(t);); out.writeInt(uni

20、tsi out.writeInt(unitsi);); out.writeChar(t out.writeChar(t);); out.writeChars(descsi out.writeChars(descsi);); out.writeChar(n out.writeChar(n);); out.close(); out.close(); / read it in again / read it in again DataInputStream in = new DataInputStream(new DataInputStream in = new DataInputStream(ne

21、w FileInputStream(invoice1.txt); FileInputStream(invoice1.txt); double price; double price; int int unit; unit; String desc String desc; ; double total = 0.0; double total = 0.0; 29try try while (true) while (true) price = in.readDouble price = in.readDouble();(); in.readChar in.readChar(); / throws

22、 out the tab(); / throws out the tab unit = in.readInt unit = in.readInt();(); in.readChar in.readChar(); / throws out the tab(); / throws out the tab desc = in.readLine desc = in.readLine();(); System.out.println(Youve System.out.println(Youve ordered + ordered + unit + units of + unit + units of +

23、 desc desc + at $ + price); + at $ + price); total = total + unit total = total + unit * * price; price; catch (EOFException catch (EOFException e) e) System.out.println(For System.out.println(For a TOTAL of: $ + total); a TOTAL of: $ + total); in.close(); in.close(); Youve ordered 12 units of Java

24、T-shirt at $19.99Youve ordered 8 units of Java Mug at $9.99Youve ordered 13 units of Duke Juggling Dolls at $15.99Youve ordered 29 units of Java Pin at $3.99Youve ordered 50 units of Java Key Chain at $4.99For a TOTAL of: $892.8830标准输入输出标准输入输出System.in public static final InputStream inSystem.out pu

25、blic static final PrintStream out System.err public static final PrintStream err示例示例7-531文件文件 Java.io.File 文件类提供获取文件基本信息,以及文件类提供获取文件基本信息,以及其它与文件相关的操作。其它与文件相关的操作。创建新的文件对象:创建新的文件对象:File myFile;myFile=new File(“mymotd”);myFile = new File(“”,”mymotd”);32文件测试与实用方法文件测试与实用方法文件名文件名String getName( ) String g

26、etPath( ) String getAbsolutePath( ) String getParent( )boolean renameTo( File newName)文件测试文件测试boolean exists( ) boolean canWrite( ) boolean canRead( ) boolean isFile( ) boolean isDirectory( ) boolean isAbsolute( )33例:从例:从zip文件中读取特定文件文件中读取特定文件34随机存取文件类随机存取文件类-RandomAccessFile创建随机存取文件:创建随机存取文件:myRAFil

27、e = new RandomAccessFile(String name, String mode);myRAFile = new RandomAccessFile(File file, String mode);常用的方法:常用的方法:数据读写方法;数据读写方法;long getFilePointer( ); /返回当前文件指针返回当前文件指针void seek( long pos ); / 文件指针定位到指定位置文件指针定位到指定位置long length( ); / 返回文件长度返回文件长度“r”,”w”,”rw”35对象输入对象输入/输出流输出流把对象保存到外存,称为永久化。把对象保存到外存,称为永久化。 实现实现java.io.Serializable接口类的对象可以被输入接口类的对象可以被输入/输出。输出。只有对象的

温馨提示

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

评论

0/150

提交评论