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

下载本文档

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

文档简介

1、第第7章章 java输入与输出输入与输出系统7.1 7.1 流流7.2 7.2 标准输入标准输入/ /输出输出 7. 3 文件访问文件访问 在Java语言中,输入与输出完全基于“流”这个概念。Java输入输出的流式接口为复杂而繁重的I/O编程任务提供了一个简洁的抽象。 7.1 7.1 流流可以从不同的角度进行分类。可以从不同的角度进行分类。 按流的方向不同可以分为输入流和输出流按流的方向不同可以分为输入流和输出流 按处理数据单位的不同可以分为字节流和字符流。按处理数据单位的不同可以分为字节流和字符流。 按功能的不同可以分为节点流和处理流。按功能的不同可以分为节点流和处理流。在java中,对于数

2、据的输入输出操作以“流”(stream)方式进行。Jdk提供了各种各样的“流”类,用以获取不同的数据。文件程序0100101 文件程序0100101 程序0100101 文件程序011hello木桶流字节流和字符流字节流和字符流 在Java 2中,定义了两种类型的流:字节类和字符类字节类和字符类。 字节流字节流:为处理字节的输入和输出提供了方便的方法。例如,使用字节流读取或存入二进制数据。 字符流:字符流: 为字符的输入和输出处理提供了方便。 字节流和字符流的区别:1、字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节,先去查指定的编码表,将查到字符返回。2、

3、字节流可以处理所有类型的数据,如图片,音频数据、视频数据;字符流只能处理字符数据。【只要是处理纯文本数据,就要优先考虑使用字符流。除此之外都应该使用字节流。】节点流和处理流节点流节点流为可以从一个特定的数据源(节点)读写数据(文件,内存)数据源程序节点流数据源程序处理流处理流处理流是“连接”在已存在的流之上,通过对数据的处理为程序提供更强大的读写功能。 字节流由两个类层次结构定义。在顶层有两个抽象类:InputStream 和 OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件、网络连接、甚至是内存缓冲区。 1字节流类字节流类 字符流类由两个类层

4、次结构定义。顶层有两个抽象类:Reader和Writer。这些抽象类处理统一编码的字符流。 。2字符流类字符流类深色为节点流,浅色为处理流。深色为节点流,浅色为处理流。Java中基本流类有4 个,其它类都为这4个类的派生子类。 基于字符的基本类:Reader 、Writer 基于字节的基本类:InputStream、OutputStream *重点注意事项:重点注意事项:1所有涉及流操作的程序,均得有语句:import java.io.*。2这4个类都是抽象类。(所以,针对不同情况的输入输出,要用其派生子类)。3InputStream 类中的所有方法遇到错误时,都引发IOException异常

5、,故,在定义方法时都会加上throws IOException 。4这4个基本类的派生类有很多,要根据具体需要选择相应恰当的类。基本类的主要方法: 输入(输入( InputStream ):):int read()读取输入流的下一个字节(符)。int read(byte b)将输入流读到字节(符)数组中。int read(byte b,int off, int len)从输入流字节数组的 off 处读取 len 个字节。int skip(long n)从输入流中跳过n个字节。abstract void close()关闭输入流释放资源。 输出(输出( OutputStream ):):void

6、 wrtie(int b)将整型数b的低8位写入输出流。void wrtie(int b)将字节数组写入输出流。void wrtie(int b,int off, int len)从字节数组的off处向输出流写入len个字节。abstract void flush()强制将输出流保存在缓冲区中的数据写入终点。abstract void close()关闭输入流释放资源。InputStream常用方法:/读取一个字节并以整数的形式返回(0255),如果返回-1,已到输入流的末尾。 int read() throws IOException/读取一系列字节并存储到一个数组buffer,返回实际读取

7、的字节数,如果读取前已到输入流的末尾,返回-1。 int read(byte buffer) throws IOException/读取length个字节,并存储到一个字节数组buffer,从offset位置开始返回实际读取的字节数,如果读取前已到输入流的末尾,返回-1。 int read(byte buffer, int offset, int length) throws IOExceptionInputStream/关闭流,释放内存资源void close() throws IOException/跳过n个字节不读,返回实际跳过的字节数。long skip(long n) throws

8、IOExceptionInputStreamTest.java例如:例如:OutputStream继承自OutputStream的流是用于程序中输入数据,且数据的单位为字节(8 bit);下图中深色为节点流,浅色为处理流。OutputStreamOutputStream的基本方法/向输出流写入一个字节数据,该字节数据为参数b的低8位void write(int b) throws IOException/将一个字节类型数组中的数据写入输入流void write(byte b) throws IOException/将一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流voi

9、d write(byte b, int off, int len) throws IOExepctionOutputStream/关闭流,释放内存资源void close() throws IOException/将输出流中缓冲区的数据全部写出到目的地。void flush() throws IOExcepion Reader继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流。ReaderReader的基本方法的基本方法/读取一个字符,并以整数形式返回(065535),如果返回-1,说明已到输入流的末尾。 int read()

10、throws IOException/读取一系列字符并存储到一个数组buffer,返回实际读取的字符数,如果读取前已到输入流的末尾,则返回-1 int read(char cbuf) throws IOException/读取length个字符,并存储到一个字符数组buffer,从length位置开始返回实际读取的字符数,如果读取前已到输入流的末尾,返回-1。 int read(char cbuf, int offset, int length) throws IOExceptionReader/关闭流,释放内存资源 void close() throws IOException/跳过n个字符

11、不读,返回实际跳过的字节数。 long skip(long n) throws IOExceptionBufferedReadTest.java例如:例如:Writer继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流。WriterWriter的基本方法/向输出流中写入一个字符数据,该字节数据为参数b的16位。 void write(int c) throws IOException/将一个字符类型数组中的数据写入输出流 void write(char cbuf) throws IOException/将一个字符类型数组中的从指定

12、位置(offset)开始的length个字符写入到输出流. void write(char cbuf, int offset, int length) throws IOExceptionWriter/将一个字符串中的字符写入到输出流 void write(String string) throws IOException/将一个字符串从offset开始的length个字符写入到输出流 void write(String string, int offset, int length) throws IOException/关闭释放内存资源 void close() throws IOExcep

13、tion/将输出流中缓冲的数据全部写出到目的地 void flush() throws IOException节点流类型类型类型字节流字节流字符流字符流File(文件)FileInputStreamFileOutputStreamFileReaderFileWriterMemory ArrayByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriterMemory StringStringReaderStringWriterPipe(管道)PipedInputStreamPipedOutputStreamPipe

14、dReaderPipedWriterFileInputStream、FileOnputStream 、FileReader、FileWriter 流等仅能提供简单的文件输入输出功能。Java 提供两个类,用来全面管理文件系统。这两个类是: 一般文件类:一般文件类:File 随即存取文件类:随即存取文件类:RandowAccessFile. 7.3 文件访问FileFile类类 File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限、时间、日期和目录路径。此外,File还浏览子目录层次结构。 很多程序中文件是数据的根源和

15、目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源。Java中的目录当成File 对待,它具有附加的属性:一个可以被list()方法检测的文件名列表。 下面的构造函数可以用来生成File对象。 File(String directoryPath) File(String directoryPath, String filename) File(File dirObj, String filename)在这里,directoryPath是文件的路径名,filename 是文件名,dirObj是一个指定目录的File 对象。 File 提供的主要方法:文件

16、名相关:文件名相关:String getName():返回此File对象所表示的文件名或目录名(如果是目录的话,返回最后一级子目录名);String getPath():返回此File对象所对应的路径;String getAbsolutePath():返回此File对象所对应的绝对路径名;String getParent():返回此File对象对应目录(最后一级子目录)的父目录路径名;String renameTo(File newName):重命名此File对象对应的文件,如果重命名成功,返回true,否则返回false;获取常规文件信息:获取常规文件信息:long lastModified

17、():返回此File对象所对应文件的最后一次被修改时间,返回的是格林威治时间(GMT);long length():返回文件的长度。文件检测:boolean exists():判断文件对象的文件或目录是否存在;boolean canWrite():判断目录或文件是否可写;boolean canRead():判断目录或文件是否可写;boolean isFile():判断File对象指向的是否为一个文件;boolean isDirectory():判断File对象指向的是否为一个目录;boolean isAbsolute():判断文件对象的路径是否绝对路径。这取决于不同的操作系统,UNIX/Lin

18、ux/BSD等系统上,如果路径的开头是“/”,说明是一个绝对路径,在Windows系统上,如果路径的开头是盘符,或者路径是由“”来分隔,则说明它是一个绝对路径; File 提供的主要方法: File 提供的主要方法:文件操作:boolean createNewFile():自动创建一个File对象中指定文件名的空的文件,只有在指定文件名文件不存在的时候才能成功。boolean delete():删除File对象对应的文件或目录;File createTempFile(String prefix,String suffix):在默认的临时目录下创建一个临时文件,文件名由前缀prefix、系统生成

19、的随机数和后缀suffix指定,返回一个表示新创建的临时文件File对象;File createTempFile(String prefix,String suffix,File directory):在指定的目录directory下创建一个临时文件,文件名由前缀prefix、系统生成的随机数和后缀suffix指定,返回一个表示新创建的临时文件File对象;void deleteOnExit():在Java虚拟机退出的时候,请求删除对象所指定的文件; File 提供的主要方法:目录操作:boolean mkdir():试图新建一个File对象所定义的一个路径,如果新建成功,返回true,否则返

20、回false,此时File对象必须是目录对象;String list():只对File对象为目录时有效,返回这个目录下的所有文件以及子目录;File listFiles():返回File对象表示的路径下的所有文件对象数组举例:file1.java二、随即存取文件类随即存取文件类的对象只能代表文件,不能指向IO设备。定义RandowAccessFile f1=new RandowAccessFilea( 文件名,模式)模式: r:只读方式 ; rw:读写方式例如:RandowAccessFile f1=new RandowAccessFile ( “lx1.txt”,“rw”)* 打开文件时,文

21、件指针指向文件开头处。 文件指针可以按字节移动。常用方法getFilePoint():seek(long pos)指针绝对定位,定位到pos所指字节处。length():举例1:import java.io.*;public class ramfile public static void main(String args) String s=aaaaaaaaan,bbbbbbbbbbbbn,cccccccccccn; try RandomAccessFile rf=new RandomAccessFile(lx.txt,rw); System.out.println(file point:+

22、rf.getFilePointer() ) ; System.out.println(file length:+rf.length() ) ; rf.seek(rf.length() ); System.out.println(file point now :+rf.getFilePointer() ); for(int i=0;i8) name=name.substring(0,8); else while (name.length() 8) name=name+u0000; =name; this.age=age; 举例2:public class randfile p

23、ublic static void main(String args) throws Exception Employee e1=new Employee(aaaaaaaa,23); Employee e2=new Employee(bbbbb,25); Employee e3=new Employee(cccccccc,21); RandomAccessFile ra= new RandomAccessFile(dangan.txt,rw); ra.write(.getBytes() ) ; ra.writeInt(e1.age); ra.write(.getBy

24、tes() ) ; ra.writeInt(e2.age); ra.write(.getBytes() ) ; ra.writeInt(e3.age); / RandomAccessFile ra1= new RandomAccessFile(dangan.txt,r); System.out.println(the second employee:) ; ra.seek(0) ; ra.skipBytes(24) ; String str=; for(int i=0;i8;i+) str=str+(char)ra.readByte() ; System.out.println(

25、name:+str) ; System.out.println(age:+ra.readInt() );ra.close() ; 缓冲流缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。jdk提供了四种缓冲流,其常用的构造方法为:BufferedInputStream(InputStream in) (p158)BufferedInputStream(InputStream in, int size)比较普通的InputStream和BufferedInputStream的read的性能:BufferedStreamPerformanc

26、e.java文件FileInputStreamBufferedInputStream缓冲流BufferedReader(Reader in)BufferedReader(Reader in,int sz)常用方法:public String readLine() BufferedWriter(Writer out)BufferedWriter(Writer out, int sz)常用方法:public void newLine() 实例:TestBufferedReaderWriter.java转换流InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换。InputStreamReader需要套接在InputStreamOutputStreamWr

温馨提示

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

评论

0/150

提交评论