您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第7章 java输入输出系统
第7章java输入与输出系统7.1流7.2标准输入/输出7.3文件访问在Java语言中,输入与输出完全基于“流”这个概念。Java输入输出的流式接口为复杂而繁重的I/O编程任务提供了一个简洁的抽象。7.1流可以从不同的角度进行分类。▲按流的方向不同可以分为输入流和输出流▲按处理数据单位的不同可以分为字节流和字符流。▲按功能的不同可以分为节点流和处理流。在java中,对于数据的输入输出操作以“流”(stream)方式进行。Jdk提供了各种各样的“流”类,用以获取不同的数据。文件程序0100101……文件程序0100101……网络程序0100101……文件程序011…hello木桶流字节流和字符流在Java2中,定义了两种类型的流:字节类和字符类。字节流:为处理字节的输入和输出提供了方便的方法。例如,使用字节流读取或存入二进制数据。字符流:为字符的输入和输出处理提供了方便。字节流和字符流的区别:1、字节流读取的时候,读到一个字节就返回一个字节;字符流使用了字节流读到一个或多个字节,先去查指定的编码表,将查到字符返回。2、字节流可以处理所有类型的数据,如图片,音频数据、视频数据;字符流只能处理字符数据。【只要是处理纯文本数据,就要优先考虑使用字符流。除此之外都应该使用字节流。】节点流和处理流节点流为可以从一个特定的数据源(节点)读写数据(文件,内存)数据源程序节点流数据源程序处理流处理流是“连接”在已存在的流之上,通过对数据的处理为程序提供更强大的读写功能。字节流由两个类层次结构定义。在顶层有两个抽象类:InputStream和OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件、网络连接、甚至是内存缓冲区。1.字节流类字符流类由两个类层次结构定义。顶层有两个抽象类:Reader和Writer。这些抽象类处理统一编码的字符流。。2.字符流类深色为节点流,浅色为处理流。深色为节点流,浅色为处理流。Java中基本流类有4个,其它类都为这4个类的派生子类。基于字符的基本类:Reader、Writer基于字节的基本类:InputStream、OutputStream**重点注意事项:1所有涉及流操作的程序,均得有语句:importjava.io.*。2这4个类都是抽象类。(所以,针对不同情况的输入输出,要用其派生子类)。3InputStream类中的所有方法遇到错误时,都引发IOException异常,故,在定义方法时都会加上throwsIOException。4这4个基本类的派生类有很多,要根据具体需要选择相应恰当的类。Java中与流相关的类:基本类的主要方法:输入(InputStream):intread()————————读取输入流的下一个字节(符)。intread(byteb[])———————将输入流读到字节(符)数组中。intread(byteb[],intoff,intlen)———从输入流字节数组的off处读取len个字节。intskip(longn)—————————从输入流中跳过n个字节。abstractvoidclose()————————关闭输入流释放资源。输出(OutputStream):voidwrtie(intb)——————将整型数b的低8位写入输出流。voidwrtie(intb[])—————————将字节数组写入输出流。voidwrtie(intb[],intoff,intlen)———从字节数组的off处向输出流写入len个字节。abstractvoidflush()————————强制将输出流保存在缓冲区中的数据写入终点。abstractvoidclose()———————关闭输入流释放资源。InputStream常用方法://读取一个字节并以整数的形式返回(0~255),如果返回-1,已到输入流的末尾。intread()throwsIOException//读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入流的末尾,返回-1。intread(byte[]buffer)throwsIOException//读取length个字节,并存储到一个字节数组buffer,从offset位置开始返回实际读取的字节数,如果读取前已到输入流的末尾,返回-1。intread(byte[]buffer,intoffset,intlength)throwsIOExceptionInputStream//关闭流,释放内存资源voidclose()throwsIOException//跳过n个字节不读,返回实际跳过的字节数。longskip(longn)throwsIOExceptionInputStreamTest.java例如:OutputStream继承自OutputStream的流是用于程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。OutputStreamOutputStream的基本方法//向输出流写入一个字节数据,该字节数据为参数b的低8位voidwrite(intb)throwsIOException//将一个字节类型数组中的数据写入输入流voidwrite(byte[]b)throwsIOException//将一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流voidwrite(byte[]b,intoff,intlen)throwsIOExepctionOutputStream//关闭流,释放内存资源voidclose()throwsIOException//将输出流中缓冲区的数据全部写出到目的地。voidflush()throwsIOExcepionReader继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色为处理流。ReaderReader的基本方法//读取一个字符,并以整数形式返回(0~65535),如果返回-1,说明已到输入流的末尾。intread()throwsIOException//读取一系列字符并存储到一个数组buffer,返回实际读取的字符数,如果读取前已到输入流的末尾,则返回-1intread(char[]cbuf)throwsIOException//读取length个字符,并存储到一个字符数组buffer,从length位置开始返回实际读取的字符数,如果读取前已到输入流的末尾,返回-1。intread(char[]cbuf,intoffset,intlength)throwsIOExceptionReader//关闭流,释放内存资源voidclose()throwsIOException//跳过n个字符不读,返回实际跳过的字节数。longskip(longn)throwsIOExceptionBufferedReadTest.java例如:Writer继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色为处理流。WriterWriter的基本方法//向输出流中写入一个字符数据,该字节数据为参数b的16位。voidwrite(intc)throwsIOException//将一个字符类型数组中的数据写入输出流voidwrite(char[]cbuf)throwsIOException//将一个字符类型数组中的从指定位置(offset)开始的length个字符写入到输出流.voidwrite(char[]cbuf,intoffset,intlength)throwsIOExceptionWriter//将一个字符串中的字符写入到输出流voidwrite(Stringstring)throwsIOException//将一个字符串从offset开始的length个字符写入到输出流voidwrite(Stringstring,intoffset,intlength)throwsIOException//关闭释放内存资源voidclose()throwsIOException//将输出流中缓冲的数据全部写出到目的地voidflush()throwsIOException节点流类型类型字节流字符流File(文件)FileInputStreamFileOutputStreamFileReaderFileWriterMemoryArrayByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriterMemoryStringStringReaderStringWriterPipe(管道)PipedInputStreamPipedOutputStreamPipedReaderPipedWriterFileInputStream、FileOnputStream、FileReader、FileWriter流等仅能提供简单的文件输入输出功能。Java提供两个类,用来全面管理文件系统。这两个类是:一般文件类:File随即存取文件类:RandowAccessFile.7.3文件访问File类File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限、时间、日期和目录路径。此外,File还浏览子目录层次结构。很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源。Java中的目录当成File对待,它具有附加的属性:一个可以被list()方法检测的文件名列表。下面的构造函数可以用来生成File对象。File(StringdirectoryPath)File(StringdirectoryPath,Stringfilename)File(FiledirObj,Stringfilename)在这里,directoryPath是文件的路径名,filename是文件名,dirObj是一个指定目录的File对象。•File提供的主要方法:文件名相关:StringgetName():返回此File对象所表示的文件名或目录名(如果是目录的话,返回最后一级子目录名);StringgetPath():返回此File对象所对应的路径;StringgetAbsolutePath():返回此File对象所对应的绝对路径名;StringgetParent():返回此File对象对应目录(最后一级子目录)的父目录路径名;StringrenameTo(FilenewName):重命名此File对象对应的文件,如果重命名成功,返回true,否则返回false;获取常规文件信息:longlastModified():返回此File对象所对应文件的最后一次被修改时间,返回的是格林威治时间(GMT);longlength():返回文件的长度。文件检测:booleanexists():判断文件对象的文件或目录是否存在;booleancanWrite():判断目录或文件是否可写;booleancanRead():判断目录或文件是否可写;booleanisFile():判断File对象指向的是否为一个文件;booleanisDirectory():判断File对象指向的是否为一个目录;booleanisAbsolute():判断文件对象的路径是否绝对路径。这取决于不同的操作系统,UNIX/Linux/BSD等系统上,如果路径的开头是“/”,说明是一个绝对路径,在Windows系统上,如果路径的开头是盘符,或者路径是由“\”来分隔,则说明它是一个绝对路径;•File提供的主要方法:•File提供的主要方法:文件操作:booleancreateNewFile():自动创建一个File对象中指定文件名的空的文件,只有在指定文件名文件不存在的时候才能成功。booleandelete
本文标题:第7章 java输入输出系统
链接地址:https://www.777doc.com/doc-3995303 .html