JAVA IO流学生课件

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

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

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

资源描述

Java流本节主要内容流的概述流的分类InputStream/OutputStreamReader/Writer流的几种典型流向RandomAccessFile的用法I/O流概述为进行数据的输入/输出操作,Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream)。Stream是从起源(source)到接收(sink)的有序数据java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能。按照流的方向分两种基本的流:输入流和输出流输入流:只能从中读取字节数据,而不能向其写出数据输出流:只能向其写入字节数据,而不能从中读取数据按照流所处理的数据类型划分,可以分为:字节流:用于处理字节数据(8个bit)包括InputStream/OutputStream。字符流:用于处理Unicode字符数据(16个bit)。包括Writer/Reader节点流和处理流按照流的角色划分,分为节点流和处理流可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,称为节点流。节点流也被称为低级流。例如:InputStream和Reader的子类都有read()的方法,OutputStream和Writer的子类都有write()的方法,用于读取/写入一个字节或字节数组.但是在实际使用中很少使用单一流类产生的输入/输出流.而是使用这两个方法给其他的流类提供数据数据源程序数据源程序•实现对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读/写功能的流,称为处理流。处理流也被称为高级流。InputStream/OutputStreamInputStream/OutputStream用于处理字节数据。它们读/写流的方式都是以字节为单位进行的。InputStream基本方法三个基本的read方法:•intread():读取一个字节,并将它返回。•intread(byte[]buffer):将数据读入一个字节数组,同时返回读取的字节数。•intread(byte[]buffer,intoffset,intlength):将数据读入一个字节数组,放到数组的offset指定的位置开始,并用length来指定读取的最大字节数。注意:以上三个方法在读取到文件末尾时,都返回-1.可以用来判断是否全部读取文件其它方法:•voidclose():关闭流。•intavailable():返回可以从中读取的字节数。•longskip(longn):在输入流中跳过n个字节,将实际跳过的字节数返回。•booleanmarkSupported():判断流是否支持标记功能。•voidmark(intreadlimit):在支持标记的输入流的当前位置设置一个标记。•voidreset():返回到流的上一个标记。注意必须流支持标记功能。常见InputStream类低级InputStream类(节点流):InputStream:所有字节流的超类,定义了很多用于处理输入流的方法,是个抽象类ByteArrayInputStream:为读取字节数组设计的流,用于从文件中读取二进制数据PipedInputStream:管道流,FileInputStream:用于读取文件中的信息FilterInputStream:继承自InputStream,能将一个流连接到另一个流的末端,将两个流连接起来高级InputStream类(处理流):DataInputStream:可以从低级流中读取简单数据和String类型的数据.这样,可以将底层的读取细节隐藏起来,而直接处理简单类型和String类型的数据BufferedInputStream:提供缓冲能力的字节输入流InputStream类层次InputStreamFileInputStreamStringBufferInputStreamByteArrayInputStream节点流处理流ObjectInputStreamPipedInputStreamSequenceInputStreamFilterInputStreamDataInputStreamPushbackInputStreamBufferedInputStreamLineNumberInputStreamInputStream例子(示例10-1)byte[]buff=newbyte[1024];intn;FileInputStreamfis=null;try{fis=newFileInputStream(“C:\\a.txt”);while((n=fis.read(buff))!=-1){System.out.write(buff,0,n);}}catch(FileNotFoundExceptione){System.out.println(没有找到文件);System.exit(1);}……OutputStream基本方法三个基本的write方法:voidwrite(intc)voidwrite(byte[]buffer)voidwrite(byte[]buffer,intoffset,intlength)其它方法voidclose()voidflush():将缓冲中的字节发送到流中,同时清空缓冲区OutputStream类低级OutputStream,用来向设备中写入字节流OutputStream:所有字节输出流的基类ByteArrayOutputStream:按字节数组方式向设备中写入字节流的类PipedOutputStream:管道输出流高级OutputStreamDataOutputStream:可以向低级流中写入简单数据和String类型的数据.这样,可以将底层的写入细节隐藏起来,而直接处理简单类型和String类型的数据BufferedOutputStream:提供缓冲能力的字节输出流OutputStream类层次OutputStreamFileOutputStreamFilterInputStreamByteArrayOutputStreamPipedOutputStream节点流处理流ObjectOutputStreamDataOutputStreamPrintStreamBufferedOutputStreamOutputStream例子(示例10-2)FileOutputStreamout;//声明一个PrintStream流PrintStreamp;try{out=newFileOutputStream(myfile.txt);p=newPrintStream(out);p.println(面朝大海,春暖花开);p.close();}catch(Exceptione){System.err.println(Errorwritingtofile);}通过Stream拷贝文本文件例子(示例10-3)通过FileInputStream和FileOutputStream,实现从一个文本文件拷贝内容到另一个文件的例子通过FileInputStream从源文本文件中读出数据,然后通过FileOutputStream写入到另外一个文本文件中。使用高级流(BufferedInputStream/BufferedOutputStream)对低级流进行包装Reader/WriterReader/Writer处理的是字符类型的数据。它处理流的方式是以字符为单位进行的。Reader/Writer和InputStream/OutputStream一样,也分为节点流(低级流)和处理流(高级流)。Reader和InputStream一样,用于从流中读取数据。它和InputStream的区别在于,InputStream以字节为单位操作流,而Reader以字符为单位操作流。Reader常用方法读取方法:intread():用于从流中读出一个字符,并将它返回。intread(char[]buffer):将从流中读出的字符放到字符数组buffer中,返回读出的字符数。intread(char[]buffer,intoffset,intlength):将读出的字符放到字符数组的指定offset开始的空间,每次最多读出length个字符。其他方法:voidclose():关闭Reader流。booleanready():判断流是否已经准备好被读取。skip(longn):跳过指定的n个字符。booleanmarkSupported():和InputStream中的markSupported方法类似。voidmark(intreadAheadLimit):和InputStream中的mark方法类似。voidreset():和InputStream中的reset方法类似。Reader相关类低级Reader类:CharArrayReader:StringReaderPipedReaderFileReader高级Reader类BufferedReaderInputStreamReaderLineNumberReaderReader类层次ReaderBufferedReaderStringReaderCharArrayReaderInputStreamReaderPipedReaderFilterReaderFileReaderPushbackReaderLineNumberReader节点流处理流Reader例子(示例10-4)FileReaderfr=newFileReader(C:/nos/tmp/mydata.txt);BufferedReaderbr=newBufferedReader(fr);Stringrecord=newString();while((record=br.readLine())!=null){recCount++;System.out.println(Line+recCount+:+record);}InputStreamReaderInputStreamReader能将字节流转换为一个Reader,即能将字节流转换为字符流publicstaticvoidreadRile(){try{InputStreamReaderisr=newInputStreamReader(newFileInputStream(c:\\a.txt));BufferedReaderbufferedReader=newBufferedReader(isr)Stringstr=;while((str=bufferedReader.readLine())!=null){System.out.println(str);}}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}CharArrayReader从内存的字符串数组中读取字符,它的数据源是一个字符数组,它把字符数组类型转换为Reader类型:publicstaticvoidreadRile(){char[]arrays={'a','你','好','啊','t'};CharArrayReaderreader=newCharArrayReader(arrays);inti=0;try{while((i=reader.read())!=-1){System.out.print((char)i);}}catch(IOExceptione){//TODO自动生成catch块e.printStackTrace();}reader.close();}StringReader把String类型转换为Reader类型publicstaticvoidreadRile(){Stringstr=“经费来的快速家法律监督是分机离开收到\n将发了开赛发了看见

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

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

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

×
保存成功