声明:本文属于原创作品,转载请注明出处。
本文是关于Java语言对于压缩文件ZIP的一些操作,可以通过流对象ZipInputStream来操作,也可以通过文件对象ZipFile来操作。其中,使用文件对象读写的时候,用到了高数缓存(Cache),文件只打开一次,被重复使用。如果操作过程中,ZIP文件不是经常变化,选择ZipFile性能比较好,如果经常变化在,则更适合选ZipInputStream。具体情况应该具体分析。
下面是一个示例代码,欢迎指正,交流。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**
* Examples about ZIP Stream
*
* @author bingduanLin
*
*/
public class ZipOutputStreamDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileOutputStream fo = new FileOutputStream("test.zip");
ZipOutputStream zo = new ZipOutputStream(fo);
zo.setComment("Comment, where will you be?");
/*
* putNextEntry方法: 该方法首先检查是否有Entry是激活的,如果有,关闭它。将ZipOutputStream流
* 定位到下一条Entry的地方,开始写入数据。 Begins writing a new zip entry and positions
* the stream to the start of the entry data. close current if it is
* active
*/
int byteSize = 0;
for (int i = 0; i < 5; i++) {
ZipEntry ze = new ZipEntry(i + ".txt");
ze.setComment("Comment for each entry!");
zo.putNextEntry(ze); // called by ZipOutputStream
String name = "林泽亚";
byte[] bytes = Encode(name);
byteSize = bytes.length;
zo.write(bytes);
zo.closeEntry();
}
zo.close();
// 上述代码最好封装在一个方法中
readZip("test.zip", byteSize);
readZipByZipFile("test.zip", byteSize);
}
/**
* @param zipName
* the name of zip file to be readed
* @throws IOException
*/
private static void readZip(String zipName, int byteSize)
throws IOException {
ZipInputStream zi = new ZipInputStream(new FileInputStream(zipName));
ZipEntry entry;
while ((entry = zi.getNextEntry()) != null) {
System.out.println(entry.getName());
byte[] b = new byte[byteSize];
zi.read(b);
System.out.print(decode(b) + ":");
for (byte by : b) {
System.out.printf("%X ", by);
}
System.out.println();
zi.closeEntry();
}
zi.close();
}
/**
* @param zipName
* @param byteSize
* @throws IOException
* @throws ZipException
*/
private static void readZipByZipFile(String zipName, int byteSize)
throws ZipException, IOException {
ZipFile zf = new ZipFile(new File("test.zip"));
ZipEntry entry = zf.getEntry("0.txt");
InputStream is = zf.getInputStream(entry);
byte[] bytes = new byte[byteSize];
is.read(bytes);
System.out.println(decode(bytes));
zf.close();
}
/**
* @param source
* String to be encoded
* @return byte array presentation of "source"
*/
private static byte[] Encode(String source) {
ByteBuffer bf = charset.encode(source);
return bf.array();
}
/**
* @param bytes
* bytes to be decoded
* @return the String of bytes
*/
private static String decode(byte[] bytes) {
ByteBuffer bf = ByteBuffer.wrap(bytes);
CharBuffer cf = charset.decode(bf);
return cf.toString();
}
private static Charset charset = Charset.forName("GBK");
}
分享到:
相关推荐
网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; ...
使用java的zip压缩库 对文件和文件夹实现压缩
java 操作 zip压缩,解压缩 java 操作 zip压缩,解压缩 java 操作 zip压缩,解压缩 java 操作 zip压缩,解压缩 java 操作 zip压缩,解压缩
javaZIP压缩源代码,可以很方便的进行打包.源码含有详细的注释.
JAVA源码Javazip压缩包查看程序源码
为了实现ZIP文件的加密,我们需要依赖第三方库,例如Apache Commons Compress或者Java 7及以上版本引入的`java.nio.file`和`java.util.zip`中的`ZipFile`和`ZipEntry`类。 对于ZIP 2.0加密,Apache Commons ...
在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...
Java zip解压,并遍历zip中的配置文件 .cfg或.properties,项目实用
在Java编程环境中,读取ZIP文件是一项常见的任务,特别是在处理归档数据或打包资源时。以下将详细讲解如何使用Java来实现这一功能。 首先,Java提供了`java.util.zip`包,该包包含了处理ZIP文件所需的类,如`...
java源码资源Java zip压缩包查看程序源码提取方式是百度网盘分享地址
Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件,官方网址为:http://www.lingala.net/zip4j/ 可以下载到jar包、源码和示例,好像没有提供API文档。 不过需要使用代理访问...
java 打zip压缩包 解压缩包Eclipse项目20111011 java 打zip压缩包 解压缩包Eclipse项目20111011java 打zip压缩包 解压缩包Eclipse项目20111011
本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
java的zip压缩图片和文件。并且可以直接压缩整个文件夹。及解压功能
java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip压缩功能,java实现zip...
java zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzipjava zip unzip
在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...