大家在用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
分享到:
相关推荐
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
将zip.exe 、unzip.exe放到Git的bin目录下,就可以在Git终端(Git Bash Here)中使用 二、CMD终端 将zip.exe 、unzip.exe的路径追加到环境变量Path中(也可以直接将程序放到C:\Windows目录下) 三、使用方法 解...
用Qt开发的文件及文件夹得压缩以及解压功能,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指令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! 如果你觉得本文对你有帮助...
在windows下也能执行Linux下的zip跟unzip命令。 需将上述资源解压后添加到环境变量即可使用。务必添加!
下载文件后解压可得到 unzip60.tar.gz 和 zip30.tar.gz 两个文件。 编译zip30.tar.gz: tar -zxvf zip30.tar.gz cd zip30 make -f unix/Makefile generic 编译完成后当前目录存在zip可运行文件, 若要自定义交叉...
在Linux系统上,一般自带zip和unzip命令。但是在Windows下面没有,不过只要加入这两个命令在当前目录/System32/SystemWow/Windows环境变量下,就可以愉快的使用。 压缩命令:zip -q -r aaa.zip bbb(将bbb文件压缩成...
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安装文件及安装方式linux下zip和unzip安装文件及安装方式
我在网上找的,很好用。各位在使用的时候一定要先看那个必读。因为怕有些人不会配置,所以我先编译过了,可以直接看那个DEMO。每次新建一个ZIP文件,并ADD一些文件或文件夹后,请选择CLOSE,这样你ADD的那些文件都压
一些情况下, 服务器不联网, 则安装一些常用的软件则比较麻烦, 本资源提供 Linux离线安装zip和unzip软件和安装命令, 文件包含 unzip-6.0-21.el7.x86_64.rpm 和 zip-3.0-11.el7.x86_64.rpm
clear,wget,zip,unzip安卓厨房所需!cygwin组件。
介绍一个php的zip、unzip类详解。1.打开一个ZIP包,用于读取、写入或修改;2.设置zip包的解压密码;3关闭激活的zip包(已打开的或新创建的),并保存修改;4.从zip包中,提取整个归档或给定的文件,到指定的目录或文件...
使用rpm命令安装文件 解决linux系统不能联网安装zip和unzip包问题
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类详解。1.打开一个ZIP包,用于读取、写入或修改;2.设置zip包的解压密码;3关闭激活的zip包(已打开的或新创建的),并保存修改;4.从zip包中,提取整个归档或给定的文件,到指定的目录或文件...
一些情况下, 服务器不联网, 则安装一些常用的命令比较麻烦, 本资源提供 Centos 离线安装 zip 和 unzip 命令和安装方法, 文件包含 unzip-6.0-21.el7.x86_64.rpm 和 zip-3.0-11.el7.x86_64.rpm以及安装命令。
某些windows系统会自带zip和unzip命令,但是有些不能用或者没有带,而这两个工具是linux系统中基本都自带的,实际开发中,有时候会用到,所以提供下 下载后,解压后,配置系统变量到解压路径即可,然后在dos下面就...