java代码实现 导出zip包,无法打开zip压缩包

java实现导出zip包后,在main方法中测试,可以生成zip包,也可以查看包内文件。
可是为了实现保存路径可选,加上一下代码:
response.reset();
response.setContentType("application/zip;charset=GB2312");
response.setHeader("Content-disposition","attachment; filename=\"" + name + "\"");
再执行,导出包无法打开,报“格式未知或数据已损坏”的错
请问为什么?如何解决?

第1个回答  推荐于2018-05-10
package com.lch.test;

import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ZIP {
public static void main(String[] argv) throws Exception {
ZipFile zf = new ZipFile("E:\\wk\\LBSLEMIS201106141057\\LBSLEMIS\\test\\com\\lch\\test\\filename.zip");

for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
String zipEntryName = ((ZipEntry) entries.nextElement()).getName();
System.out.println(zipEntryName);
}
}
}

用javad 的ZipFile类的ZipEntry方法试一下 找到ZIP里面的ZipEntry方法 读取Zip里面压缩文件的内容

有可能会引用外包

你好,我不知道你说的dzp是什么格式文件,但如果是zip的压缩文件,可以看下我的这段代码

ZipFile file = new ZipFile("d:\\1.zip");
ZipEntry entry = file.getEntry("1.xml"); //假如压缩包里的文件名是1.xml
InputStream in=file.getInputStream(entry);
最后就是按照java中一贯的流的处理方式即可

可以不解压,zip包里的一个对象就是一个ZipEntry
找到你想要的那个ZipEntry,用文流写出来就可以了。追问通过ZipEntry,然后用流就可以读出里面的内容了吗?谢谢指点!
回答/**
* 解压
* @param root 输出目标
* @param zipfile zip文件
*/
protected void unzip(File root, File zipfile, String file) throws Exception {

// 解压文件不存在时返回
if (!zipfile.exists()) {
return;
}
// 释放目录不存时创建
if (!root.exists()) {
root.mkdirs();
}
// 释放目录不为目录时返回
if (!root.isDirectory()) {
return;
}

FileInputStream fin = new FileInputStream(zipfile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry entry = null;

while ((entry = zin.getNextEntry()) != null) {
// if (!entry.getName().endsWith(file)) {
// continue;
// }
File tmp = new File(root, entry.getName());
if (entry.isDirectory()) {
tmp.mkdirs();
} else {
byte[] buff = new byte[4096];
int len = 0;
tmp.getParentFile().mkdirs();
FileOutputStream fout = new FileOutputStream(tmp);
while ((len = zin.read(buff)) != -1) {
fout.write(buff, 0, len);
}
zin.closeEntry();
fout.close();
}
}

}
这里完整的解压代码。
// if (!entry.getName().endsWith(file)) {
// continue;
// }
这段打开就是只解出一个你指定的文件。

下面是测试用的。
public static void main(String[] args) throws Exception {
new CommonFiles().unzip(new File("D:\\"), new File("D:\\test.zip"),"file.txt");
}

这个例子会在D盘生成型个test文件夹,file.txt就会在里面,(里面也可能会有多个文件夹,这个取决于压缩包里文件的度)追问

我已经能够打包了,但我要的是打包后弹出窗指定要存放的路径,就像下载文件那样~~我加上我问题中的代码后,可以实现弹窗指定路径,但压缩文件却损坏,求解

本回答被网友采纳
第2个回答  2013-05-02
我也遇到了这样的问题 我是因为程序中写的物理路径不对,最后少了“\\” ,你看看你的是不是也这样
第3个回答  2011-10-31
可以去 csdn 找下。 你也可以参考 http://sunjun041640.blog.163.com/blog/static/256268322007112475950559/追问

我已经能导出zip包,也没有乱码,就是包打不开,你推荐这个文章帮不了我啊

相似回答