`
0428loveyu
  • 浏览: 30899 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Java ZIP

 
阅读更多

声明:本文属于原创作品,转载请注明出处。


本文是关于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 zip解压中文乱码问题

    网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    java 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压缩,解压缩 java 操作 zip压缩,解压缩 java 操作 zip压缩,解压缩

    javaZIP压缩源代码

    javaZIP压缩源代码,可以很方便的进行打包.源码含有详细的注释.

    JAVA源码Javazip压缩包查看程序源码

    JAVA源码Javazip压缩包查看程序源码

    java加密解密zip压缩包

    为了实现ZIP文件的加密,我们需要依赖第三方库,例如Apache Commons Compress或者Java 7及以上版本引入的`java.nio.file`和`java.util.zip`中的`ZipFile`和`ZipEntry`类。 对于ZIP 2.0加密,Apache Commons ...

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    Java zip解压,并遍历zip中的配置文件 .cfg或.properties

    Java zip解压,并遍历zip中的配置文件 .cfg或.properties,项目实用

    java读取zip文件

    在Java编程环境中,读取ZIP文件是一项常见的任务,特别是在处理归档数据或打包资源时。以下将详细讲解如何使用Java来实现这一功能。 首先,Java提供了`java.util.zip`包,该包包含了处理ZIP文件所需的类,如`...

    java源码资源Javazip压缩包查看程序源码

    java源码资源Java zip压缩包查看程序源码提取方式是百度网盘分享地址

    zip4j--Java操作zip压缩文件接口

    Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件,官方网址为:http://www.lingala.net/zip4j/ 可以下载到jar包、源码和示例,好像没有提供API文档。 不过需要使用代理访问...

    java zip压缩包 解压zip Eclipse项目

    java 打zip压缩包 解压缩包Eclipse项目20111011 java 打zip压缩包 解压缩包Eclipse项目20111011java 打zip压缩包 解压缩包Eclipse项目20111011

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...

    详解Java无需解压直接读取Zip文件和文件内容

    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压缩功能,java实现zip...

    java zip unzip

    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内的文件.docx

    在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...

Global site tag (gtag.js) - Google Analytics