Java第12篇输入输出I/O

概述:流是一组有序的数据序列,分为输入和输出,I(input)/O(output) ,它提供了一条通道程序,可以使这条通道把源中的字节序列送到目的地,虽然I/O流经常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存、显示器等。

负责输入输出的类在java。io中,所有输入流类都是抽象类 InputStream(字节输入流)或者抽象类Reader(字符输入流)的子类,而所有输出流都是抽象类OutputStream(字节输出流)或者抽象类Writer(字符输出流)的子类。

输入流:



并不是所有的InputStream类的子类都支持InputStream中定义的方法,如skip()、mark()、reset()只对某些可用,java中的字符是Unicode编码,是双字节的,InputStream是用来处理字节的,在处理字符文本时不是很方便,所以java为字符文本提供了一套单独的类Reader,它是字符输入流的抽象类,所有字符输入流的实现类都是它的子类,

字符输入流:Reader


输出流:OutStream


outputStream类中的所有方法均返回void


字符输出流:Writer


File类:IO中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等,他主要用来获取文件本身的一些信息,数据流可以将数据写入文件中,

文件的创建与删除:创建主要有3个构造函数,(1)new File(string 路径名称并包含文件名)(2)new File(string 父路径字符串, string 子路径字符串并包含文件名)(3)new File(File 父路径对象, string 子路径字符串).对于MircroSoft windows平台,包含盘的路径名前缀由驱动器和一个“:”组成,如果路径是绝对路径 还可能跟“\\”.(绝对路径就是从盘符开始,不用拼接的路径)这里有一个用File.exists()和file。delete()做了个小练习。


文件输入输出流:

构造方法:new FileInputStream(string name)用给定的文件名创建一个对象new FileInputStream(File file)用给定的File对象创建一个对象,FileOutputStream 类有与FileInputStream类相同的构造方法,创建一个 FileOutputStream 对象时,可以指定一个不存在的文件名,但是此文件不能是一个已经被其他程序打开的文件,虽然Java语言在程序结束时自动关闭所有打开的流,但是当使用完后,主动关闭是个好习惯,如果没有关闭,另一个程序访问的时候可能访问不到。

FileReader和FileWriter类:

FileInputStream和FileOutputStream 两个类只提供了对字节或字节数组的读取方法,由于汉子占两个字节,如果使用字节流,读取不好可能会出现乱码现象,此时采用FileReader和FileWriter即可避免这种现象。FileReader能流顺的读取文件,只要不关闭流,每次调用read()方法就会顺序的读取源中其余的内容,知道源的末尾或者流关闭(就是一个字符一个字符的读,返回unicode值,可以用char强转为字符),

带缓存的输入/输出流

缓存可以说是I/O的一种性能优化,缓存流为I/O流增加了内存缓存区,有了缓存区,使得流在执行skip()、mark()、reset()称为可能。

bufferedInputStream和bufferedOutStream 类

bufferedInputStream类可以对任意的InputStream类进行带缓存区的包装以达到性能的优化,bufferedInputStream有两个构造函数,bufferedInputStream(InputStream in)和bufferedInputStream(InputStream in, int size)第一种形式是创建了一个带有32个字节的缓存流,第二种是指定大小的缓存流,


bufferedOutStream 输出信息和向OutputStream输入信息完全一样,只不过bufferedOutStream 有一个flush方法,它用来将缓存区的数据强制输出完,bufferedOutStream 有两个构造函数,bufferedOutStream OutputStream out)和bufferedOutStream OutputStream out, int size)第一种创建一个32个字节的缓存区,第二种为制定大小的缓存区。flush方法就是用于即使缓存区没有满的情况下,也强制将缓存区的内容强制写入外设,习惯上称这个过程为刷新,flush只对使用缓存区的OutputStream类的子类有效,当调用close()方法时,系统在关闭流前,也会将魂村去中的信息刷新到磁盘中。

bufferedReader和bufferedWriter类 :他们分别继承了 Reader和writer

bufferedReader 的几个方法: read()读取单个字符 readline()读取一行文本,并返回字符串,若无数据返回null

write(string s, int off, int leng)写入字符串的某一部分。 flush()刷新该流的缓存。newline()写入一个行分隔号符。再使用bufferedWriter的write方法时,数据并没有立刻写入输出流中,而是先进入缓存区中,如果想立刻将缓存区中的数据写入输出流中,一定要用flush方法,

数据输入输出流:DataInputStream类与DataOutputStream :当读取一个数据时,不必再关心这个数值应当是什么字节,

DataInputStream(InputStream in)使用指定的基础InputStream 创建一个对象。

DataOutputStream (OutputStream out)创建一个新的数据输出流,将数据写入指定基础输出流。有三个方法可以使用(1)writeByetes(string s)将字符串中每一个字符的低字节内容写入目标设备中,(2) writeChars将字符串中每一个字符的两个字节的内容都写到目标设备中(string s)(3) writeUTF(string s)将字符串按照UTF编码后的字节长度写入目标设备,然后才是每个字节的UTF编码,

DataInputStream只提供了一个readUTF方法返回一个字符串。这个方法读取的是用writeUTF(string s)写入的字符串,其他两种不行

ZIP压缩输入/输出流 :java.util.zip包里的ZipOutputStream类与ZipInputputStream类,如果要从zip压缩管理文件内读取某个文件,要先找到对应该文件的“目录进入点”(从它可知该文件在ZIP文件内的位置)才能读取这个文件内容。如果想要将文件写入zip文件内,必须先写入对应于该文件的“目录进入点”并且把要写入文件内容的位置移到此进入点所指的位置,然后在写入文件内容。java实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩实现比较容易。ZIPentry类产生的对象用来代表一个ZIP压缩文件内的进入点(entry)。zipInputStream类用来读取ZIP压缩格式文件,所支持的包括已压缩及未压缩的进入点(entry)。zipOutputStream类用来写出ZIP压缩格式文件,而且所支持的包括已压缩及未压缩的进入点(entry)。

压缩文件:利用zipoutputStream类对象,可将文件压缩为.zip文件。ZipOutputStream类的构造函数  ZipOutputStream(outputstream out

每一个ZIP文件中可能包含多个文件,使用ZipOutputStream类将文件写入目标ZIP文件时,必须先使用ZipOutputStream对象

的putNextEntry()方法,写入个别文件的entry,将流内目前指到的位置移到该entry所指的开头位置,

解压缩ZIP

zipInputStream 类可读取ZIP压缩格式的文件,包括对已压缩和未压缩条目的支持(entry)。构造函数:zipInputStream (InputStream  in


使用zipInputStream来解压文件,必须先使用zipInputStream类的getnextentry()方法来取得其内的第一个zipentry


猜你喜欢

转载自blog.csdn.net/weixin_39407066/article/details/80942868