`

zip与unzip

    博客分类:
  • java
阅读更多

大家在用java做zip压缩解压缩时,java提供了原生的zip类

import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

 

但是实际应用中是,我们有两个问题

1.中文路径压缩解压缩问题,我网上找了找方案,都是要改源类库,如果有不用的请赐教

2.是我在实际应用中发现的,

unziping resultFile\resultFile1.txt
d:\resultFile\resultFile1.txt
f:d:\resultFile\resultFile1.txt
java.util.zip.ZipException: invalid entry compressed size (expected 4294967295 but got 7 bytes)
	at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:391)
	at java.util.zip.ZipInputStream.read(ZipInputStream.java:156)
	at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:105)
	at TestZip.unzip(TestZip.java:55)
	at TestZip.main(TestZip.java:93)

 原因不明,但我估计和压缩的版本有关,zip来源是我同学用c#压缩的东西,试了很多种方法基于java原生zip的方法都不行,后来尝试了commons-compress-1.1.jar,apache的开源类库(话说很多java原生的类库比起apache的工具类都差好多),解压缩实现如下,是改了网上某人的,他的方法有点问题

public static void decompress(String srcFile, String destPath) { 
		try {  
			File outFile = new File(destPath); 
			if (!outFile.exists()) {    
				outFile.mkdirs();   
			}   
			ZipFile zipFile = new ZipFile(srcFile); 
			Enumeration<?> en = zipFile.getEntries(); 
			ZipArchiveEntry zipEntry = null;  
			while (en.hasMoreElements()) {   
				zipEntry = (ZipArchiveEntry) en.nextElement(); 
				if (zipEntry.isDirectory()) {   
		// mkdir directory   
		String dirName = zipEntry.getName();   
		dirName = dirName.substring(0, dirName.length() - 1);   
		File f = new File(outFile.getPath() + "/" + dirName);  
		f.mkdirs();    
		}
				else {    
		// unzip file   
		File f = new File(outFile.getPath() + "/" + zipEntry.getName());
		if(!f.getParentFile().exists()){
			f.getParentFile().mkdirs();
		}
		f.createNewFile(); 
		InputStream in = zipFile.getInputStream(zipEntry);   
		OutputStream out = new FileOutputStream(f);   
		IOUtils.copy(in, out);    
		out.close();  
		in.close();    }   } 
			zipFile.close();  }
		catch (Exception e)
		{   e.printStackTrace(); 
		} 
		}

 红字是我加的,使用无非是

decompress("d:\\resultFile.zip","e:\\1",);

 附件是我找的commons-compress-1.1.jar

分享到:
评论

相关推荐

    github_安装zip与unzip命令需要的文件.zip

    Git Bash 中没有zip和unzip 命令怎么办? 在git bash上安装zip和unzip命令需要的文件;git bash 报错bash: *: command not found zip-3.0-bin.zip;bzip2-1.0.5-bin.zip

    Windows终端配置zip、unzip命令

    将zip.exe 、unzip.exe放到Git的bin目录下,就可以在Git终端(Git Bash Here)中使用 二、CMD终端 将zip.exe 、unzip.exe的路径追加到环境变量Path中(也可以直接将程序放到C:\Windows目录下) 三、使用方法 解...

    Qt 压缩 zip/unzip

    用Qt开发的文件及文件夹得压缩以及解压功能,zip,unzip

    Windows终端配置zip、unzip 命令

    Windows终端配置zip、unzip 和linux 中zip一致 # 方法一 1. 将 zip.exe 、unzip.exe 加入到 环境变量的Path中 2. 打开cmd终端,即可使用zip、unzip命令 #方法二 把 zip.exe 和unzip.exe文件复制到目录中 C:\...

    Linux、CentOS下安装zip与unzip指令功能(服务器)

    以上所述是小编给大家介绍的Linux、CentOS下安装zip与unzip指令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! 如果你觉得本文对你有帮助...

    Windows执行zip、unzip命令行

    在windows下也能执行Linux下的zip跟unzip命令。 需将上述资源解压后添加到环境变量即可使用。务必添加!

    zip30 unzip60 源码下载以及编译,以及自定义交叉编译方法

    下载文件后解压可得到 unzip60.tar.gz 和 zip30.tar.gz 两个文件。 编译zip30.tar.gz: tar -zxvf zip30.tar.gz cd zip30 make -f unix/Makefile generic 编译完成后当前目录存在zip可运行文件, 若要自定义交叉...

    Windows上的zip和unzip

    在Linux系统上,一般自带zip和unzip命令。但是在Windows下面没有,不过只要加入这两个命令在当前目录/System32/SystemWow/Windows环境变量下,就可以愉快的使用。 压缩命令:zip -q -r aaa.zip bbb(将bbb文件压缩成...

    centos6离线rpm安装unzip和zip

    centos6离线rpm安装unzip和zip zip-3.0-1.el6_7.1.x86_64.rpm unzip-6.0-5.el6.x86_64.rpm 解决Red Hat 6.9系统No more mirrors to try问题; 1.查看 unzip 是否被安装 rpm -qa | grep unzip 2.先安装unzip: rpm ...

    linux下zip和unzip安装文件及安装方式.zip

    linux下zip和unzip安装文件及安装方式linux下zip和unzip安装文件及安装方式

    C++ Zip/Unzip源代码

    我在网上找的,很好用。各位在使用的时候一定要先看那个必读。因为怕有些人不会配置,所以我先编译过了,可以直接看那个DEMO。每次新建一个ZIP文件,并ADD一些文件或文件夹后,请选择CLOSE,这样你ADD的那些文件都压

    Centos离线安装zip和unzip软件

    一些情况下, 服务器不联网, 则安装一些常用的软件则比较麻烦, 本资源提供 Linux离线安装zip和unzip软件和安装命令, 文件包含 unzip-6.0-21.el7.x86_64.rpm 和 zip-3.0-11.el7.x86_64.rpm

    clear_wget_zip_unzip

    clear,wget,zip,unzip安卓厨房所需!cygwin组件。

    php的zip、unzip类详解.zip

    介绍一个php的zip、unzip类详解。1.打开一个ZIP包,用于读取、写入或修改;2.设置zip包的解压密码;3关闭激活的zip包(已打开的或新创建的),并保存修改;4.从zip包中,提取整个归档或给定的文件,到指定的目录或文件...

    rpm zip和unzip.zip

    使用rpm命令安装文件 解决linux系统不能联网安装zip和unzip包问题

    linux zip unzip RPM安装包,亲测可用

    linux zip unzip RPM安装包,亲测可用 用于解压war包,zip包 内含unzip-6.0-5.el6.x86_64.rpm zip-3.0-1.el6_7.1.x86_64.rpm

    php的zip、unzip类详解

    一个php的zip、unzip类详解。1.打开一个ZIP包,用于读取、写入或修改;2.设置zip包的解压密码;3关闭激活的zip包(已打开的或新创建的),并保存修改;4.从zip包中,提取整个归档或给定的文件,到指定的目录或文件...

    Centos离线安装zip和unzip

    一些情况下, 服务器不联网, 则安装一些常用的命令比较麻烦, 本资源提供 Centos 离线安装 zip 和 unzip 命令和安装方法, 文件包含 unzip-6.0-21.el7.x86_64.rpm 和 zip-3.0-11.el7.x86_64.rpm以及安装命令。

    windows自带zip压缩unzip解压工具

    某些windows系统会自带zip和unzip命令,但是有些不能用或者没有带,而这两个工具是linux系统中基本都自带的,实际开发中,有时候会用到,所以提供下 下载后,解压后,配置系统变量到解压路径即可,然后在dos下面就...

Global site tag (gtag.js) - Google Analytics