2.3.3 ZIP文档
ZIP文档(通常)以压缩格式存储了一个或多个文件,每个ZIP文档都有一个头,包含诸如每个文件名字和所使用的压缩方法等信息。在Java中,可以使用ZipInputStream来读入ZIP文档。你可能需要浏览文档中每个单独的项,getNextEntry方法就可以返回一个描述这些项的ZipEntry类型的对象。向ZipInputStream的getInputStream方法传递该项可以获取用于读取该项的输入流。然后调用closeEntry来读入下一项。下面是典型的通读ZIP文件的代码序列:
要写出到ZIP文件,可以使用ZipOutputStream,而对于你希望放入到ZIP文件中的每一项,都应该创建一个ZipEntry对象,并将文件名传递给ZipEntry的构造器,它将设置其他诸如文件日期和解压缩方法等参数。如果需要,你可以覆盖这些设置。然后,你需要调用ZipOutputStream的putNextEntry方法来开始写出新文件,并将文件数据发送到ZIP输出流中。当完成时,需要调用closeEntry。然后,你需要对所有你希望存储的文件都重复这个过程。下面是代码框架:
注意:JAR文件(在卷Ⅰ第13章中讨论过)只是带有一个特殊项的ZIP文件,这个项称作清单。你可以使用JarInputStream和JarOutputStream类来读写清单项。
ZIP输入流是一个能够展示流的抽象化的强大之处的实例。当你读入以压缩格式存储的数据时,不必担心边请求边解压数据的问题,而且ZIP格式的字节源并非必须是文件,也可以是来自网络连接的ZIP数据。事实上,当Applet的类加载器读入JAR文件时,它就是在读入和解压来自网络的数据。
注意:2.5.8节将展示如何使用Java SE7的FileSystem类而无需特殊API来访问ZIP文档。
java.util.zip.ZipInputStream 1.1
·ZipInputStream(InputStream in)
创建一个ZipInputStream,使得我们可以从给定的InputStream向其中填充数据。
·ZipEntry getNextEntry()
为下一项返回ZipEntry对象,或者在没有更多的项时返回null。
·void closeEntry()
关闭这个ZIP文件中当前打开的项。之后可以通过使用getNextEntry()读入下一项。
java.util.zip.ZipOutputStream 1.1
·ZipOutputStream(OutputStream out)
创建一个将压缩数据写出到指定的OutputStream的ZipOutputStream。
·void putNextEntry(ZipEntry ze)
将给定的ZipEntry中的信息写出到输出流中,并定位用于写出数据的流,然后这些数据可以通过write()写出到这个输出流中。
·void closeEntry()
关闭这个ZIP文件中当前打开的项。使用putNextEntry方法可以开始下一项。
void setLevel(int level)
设置后续的各个DEFLATED项的默认压缩级别。这里默认值是Deflater.DEFAULT_COMPRESSION。如果级别无效,则抛出IllegalArgumentException。
参数:level 压缩级别,从0(NO_COMPRESSION)到9(BEST_COMPRESSION)
void setMethod(int method)
设置用于这个ZipOutputStream的默认压缩方法,这个压缩方法会作用于所有没有指定压缩方法的项上。
参数:method 压缩方法,DEFLATED或STORED
java.util.zip.ZipEntry 1.1
·ZipEntry(String name)
用给定的名字构建一个Zip项。
参数:name 这一项的名字
·long getCrc()
返回用于这个ZipEntry的CRC32校验和的值。
·String getName()
返回这一项的名字。
·long getSize()
返回这一项未压缩的尺寸,或者在未压缩的尺寸不可知的情况下返回-1。
·boolean isDirectory()
当这一项是目录时返回true。
·void setMethod(int method)
参数:method 用于这一项的压缩方法,必须是DEFLATED或STORED
·void setSize(long size)
设置这一项的尺寸,只有在压缩方法是STORED时才是必需的。
参数:size 这一项未压缩的尺寸
·void setCrc(long crc)
给这一项设置CRC32校验和,这个校验和是使用CRC32类计算的。只有在压缩方法是STORED时才是必需的。
参数:crc 这一项的校验和
java.util.zip.ZipFile 1.1
·ZipFile(String name)
·ZipFile(File file)
创建一个ZipFile,用于从给定的字符串或File对象中读入数据。
·Enumeration entries()
返回一个Enumeration对象,它枚举了描述这个ZipFile中各个项的ZipEntry对象。
·ZipEntry getEntry(String name)
返回给定名字所对应的项,或者在没有对应项的时候返回null。
参数:name 项名
·InputStream getInputStream(ZipEntry ze)
返回用于给定项的InputStream。
参数:ze 这个ZIP文件中的一个ZipEntry
·String getName()
返回这个ZIP文件的路径。