您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > JAVA---IO流及文件操作
流的概念、JavaI/O流、缓冲区、管道、文件操作I/O流&文件操作目录I/O流(字节流、字符流)Java标准输入输出缓冲区管道文件操作I/O流输入/输出处理是程序设计中非常重要的一部分,例如从键盘、外部文件输入数据,向屏幕以及外部文件输出,以及在网络上与另一台计算机的数据交互。Java将输入输出的数据抽象为“流(Stream)”,可以向流中写入数据,也可以从流中读出数据。I/O流流实际上是一个数据序列。利用流作为基本输入输出操作的好处是:程序编码独立于所涉及的设备。Java将输入输出的类及接口放在java.io包中。除了严格限定,Javaapplet不能使用输入输出功能。进行I/O操作时可能会发生异常,应当进行处理。I/O流“输入”与“输出”是站在“程序”的角度看的:输入流数据input类数据源Java程序读输入流输入流数据input类数据源Java程序读输入流I/O流通过流直接进行输入与输出,一般只适用于数据量很少的情况。当传输数据量大的时候,Java提供了“缓冲流”:数据与外设进行交互时,先集中到内存中的一块缓冲区。Java中提供了大量的类(60多个)以完成输入输出,它们形成了一个合理的自顶向下的逻辑结构。参见:inputandoutputstreamReaderandWriter字节流与字符流java.io包支持两种流:“字节流”和“字符流”。当向字节流中写入数据时,数据是以字节(byte)为单位的序列,与内存中形式相同,不发生任何转换。而字符流则是以字符为单位的数据序列。Java中实现字节流的基类是InputStream和OutputStream,它们均直接继承自Object类。InputStream和OutputStream均是抽象类,定义了输入和输出字节的基本操作。它们派生出了大量的具体功能的类。InputStream类层次OutputStream类层次字节流与字符流Java中实现字符流的基类是Reader和Writer,它们均直接继承自Object类。Reader和Writer也是抽象类,定义了输入和输出字符的基本操作。用户不能直接创建其对象,只能通过其子类来创建。Reader类层次Writer类层次InputStream&OutputStreamInputStream有3中方式从流中读入数据:intread()//读一个字节并返回,至流末尾时返回-1intread(byte[])//将数据读入byte[],返回读的字节数intread(byte[],intoffset,intlength)其它方法:voidclose()//关闭流intavailable()//返回未读的字节数longskip(longn)//跳过n个字节voidmark(int)//标记当前流,并建立int大小缓冲区InputStream&OutputStreamOutputStream有3中方式向流中写入数据:voidwrite(int)//写一个字节voidwrite(byte[])//写一个字节数组voidwrite(byte[],intoffset,intlength)其它方法:voidclose()//关闭流intflush()//强行写Reader类的基本方法intread();//读单个字符intread(charcbuf[]);//读字符放入数组中intread(charcbuf[],intoffset,intlength);//读字符放入数组的指定位置voidclose()//关闭流。longskip(longn)//跳过n个字符booleanmarkSupported()//测试打开的流是否支持书签voidmark(int)//标记当前流,并建立int大小缓冲区voidreset()//返回标签出booleanready()//测试当前流是否准备好进行读Writer类的基本方法intwrite(intc);//写单个字符intwrite(charcbuf[]);//写字符数组intwrite(charcbuf[],intoffset,intlength);intwrite(Stringstr);intwrite(Stringstr,intoffset,intlength);voidclose()voidflush()//强行写标准数据流在Java应用程序开始执行时,会自动创建3个标准数据流,供System类使用:System.in、System.out和System.errSystem.in对象:是InputStream类型的,是连接程序与标准输入设备(通常是键盘)的一个输入流对象,当执行System.in.read()操作时,从键盘得到输入数据。System.out对象:是PrintStream类型的,是连接程序和标准输出设备(通常是显示器)的一个输出流对象,当执行System.out.println()语句时,数据输出到屏幕上。System.err对象:标准错误输出流。从键盘获取数据System.in是个已定义好的InputStream类型的对象,用以获取键盘输入。但其返回的值是键盘的ASCII码值,须经转换才能显示为字符。BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));try{Stringstr=buf.readLine();System.out.println(从键盘输入的数据是:+str);}catch(IOExceptione){e.printStackTrace();}推荐的获取键盘输入的方式Java文件操作Java1.4后引入新的文件功能,提高了I/O性能,但增加了复杂性。新的I/O功能中涉及文件读写方面的有3个对象:文件流对象:FileInputStream、FileOutputStream.缓冲区对象:存放与文件进行传输的数据。通道对象:连接文件,使用一个或多个缓冲区对象以对文件进行读写。缓冲区对象通道对象文件流对象缓冲区(buffer)缓冲区是内存中的一块区域,用以缓存程序与外设间交互的数据。Buffer类是定义所以缓冲区类的基类,一个特定的缓冲区可存储一组给定类的数据单元,例如存储byte型值、char型值、short型值、int型值、long型值、float型值、double型值,但不能存储boolean型值。java.lang.Objectjava.nio.BufferIntBufferShortBufferCharBufferByteBuffer...缓冲区缓冲区的容量:缓冲区存储指定数据单元的最大数,而不是存储的最大字节数。例如IntBuffer型缓冲区容量是存储Int型数值的个数。缓冲区的位置:要读写的下一个缓冲区单元的下标(首单元下标为0)。缓冲区的边界:不能读写的第一个单元的下标。缓冲区创建缓冲区:ByteBufferbuf=ByteBuffer.allocate(1024);向缓冲区写入数据:buf.put(bytes);//bytes是byte[]型数据buf.putChar();buf.putInt();.....从缓冲区读出数据:buf.put(bytes);//bytes是byte[]型数据buf.putChar();buf.putInt();.....通道(channel)java.nio.channels.Channel接口WritableByteChannelReadableByteChannelByteChannel接口FileChannel类(FileChannel类不能直接实例化其对象,可从其它流类获得。)通道(channel)FileChannel类不能直接实例化其对象,可从其它流类获得。通道使用完毕后,须关闭:调用其close()方法。关闭通道只是断开了同文件的连接,并不影响所连接的文件。通道关闭后则不能再传输数据。判断通道是否处于打开状态,可使用方法isOpen()。文件File类主要用于获取磁盘中文件或目录的信息。File类的对象并不打开文件,也不提供任何文件处理功能。然而,java.io包中的其它类经常使用File对象来指定所要操作的文件或目录。File类的实例表示主机文件系统中的文件名或路径名。File类提供4个构造函数publicFile(Stringname)publicFile(StringpathToName,Stringname)publicFile(Filedirectory,Stringname)publicFile(URIuri)文件File类提供了30多种方法以操作File对象:getName()//返回所关联的文件或目录的名称getPath()()//返回文件的路径isAbsolute()()//是否是绝对路径list()()//返回目录下的所有目录和文件名isFile()()//是否关联的是文件isDirectory()()//是否关联的是目录delete()()//删除所关联的文件或目录......文件流当向磁盘上的物理文件读写数据时,可使用文件流FileInputStream和FileOutputStream。创建文件流对象(以写文件为例):FileOutputStreamoutFile=newFileOutputStream(“myFile.txt”);FileOutputStreamoutFile=newFileOutputStream(“myFile.txt”,true);文件操作写文件的示例程序:WriteFile.java读文件的示例程序:ReadFile.java复制文件的示例程序:CopyFile.java
本文标题:JAVA---IO流及文件操作
链接地址:https://www.777doc.com/doc-4868159 .html