java.util.zip

阅读数:104 评论数:0

跳转到新版页面

分类

python/Java

正文

Java提供了java.util.zip包用来兼容ZIP格式的数据压缩。它提供了一系列的类用来读取,创建,修改ZIP和GZIP格式的文件。

Java.util.zip包 提供了类ZipInputStream来读取ZIP文件。ZipInputStream流的创建与其它输入流的创建没什么两样。

举个例子,下面的代码段创 建了一个输入流来读取ZIP格式的文件:

FileInputStream fis = new FileInputStream("figs.zip");
ZipInputStream zin = new ZipInputStream(new BufferedInputStream(fis));

ZIP输入流打开后,你可以使用getNextEntry方法来读取ZIP文件中的条目数,该方法返回一个ZipEntry对象。如果到达文件的尾部,getNextEntry返回null:

ZipEntry entry;
while((entry = zin.getNextEntry()) != null) {
// extract data
// open output streams
}

现在,你应该建立一个输出流

int BUFFER = 2048;
FileOutputStream fos = new FileOutputStream(entry.getName());
BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);

注意:在这段代码中我们用BufferedOutputStream代替了ZIPOutputStream。 ZIPOutputStream和GZIPOutputStream使用内置的512字节缓冲。当缓冲区的大小大于512字节时,使用 BufferedOutputStream才是正确的(例子中设置为2048)。ZIPOutputStream不允许你设置缓冲区的大 小,GZIPOutputStream也是一样,但创建 GZIPOutputStream 对象时可以通过构造函数的参数指定内置的缓冲尺寸。

这段代码中,使用ZIP内含的条目名称创建一个文件输出流。可以使用entry.getName来得到它的返回句柄。接着读出被压缩的源数据,然后写入输出流:

while ((count = zin.read(data, 0, BUFFER)) != -1) {
//System.out.write(x);
dest.write(data, 0, count);
}

最后,不要忘记关闭输入和输出流:

dest.flush();
dest.close();
zin.close();

类ZipOutputStream能够用来将数据压缩成一个ZIP文件。ZipOutputStream将数据写入ZIP格式的输出流。下面的步骤与创建一个ZIP文件相关。

(1)第一步是创建一个ZipOutputStream对象,我们将要写入输出流的文件作为参数传给它。下面的代码演示了如何创建一个名为"myfigs.zip"的ZIP文件。

FileOutputStream dest = new FileOutputStream("myfigs.zip");
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));

(2)一但目标输出流创建后,下一步就是打开数据源文件。在这个例子中,源数据文件是指那些当前目录下的文件。命令list用来得到当前目录下文件列表:

File f = new File(".");
String files[] = f.list();
for (int i=0; i < files.length; i++) {
System.out.println("Adding: "+files[i]);
FileInputStream fi = new FileInputStream(files[i]);
// create zip entry
// add entries to ZIP file
}

(3) 为读出的数据创建一个ZIP条目列表:

ZipEntry entry = new ZipEntry(files[i]))

(4)在你将数据写入ZIP输出流之前,你必须使用putNextEntry方法将ZIP条目列表写入输出流:

out.putNextEntry(entry);

(5)将数据写入ZIP文件:

int count;
while((count = origin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}

(6)最后关闭所有的输入输出流:

origin.close();
out.close();

注意: 条目列表可以以两种方式加入ZIP文件中,一种是压缩方式(DEFLATED),另一种是不压缩方式(STORED),系统默认的存储方式为压缩方式 (DEFLATED)。SetMethod方法可以用来设置它的存储方式。例如,设置存储方式为DEFLATED(压缩)应该这样做: out.setMethod(ZipOutputStream.DEFLATED) 设置存储方式为(不压缩)应该这样做: out.setMethod(ZipOutputStream.STORED)。




相关推荐

查看是否是中文路径问题 当genymotion-arm-translation.zip在中文目录下时,会出现拖拽无法安装的情况。