我使用网络上的以下代码
File dir = new File(dest.getAbsolutePath(), archiveName);
// create output directory if it doesn't exist
if (!dir.exists()) {
dir.mkdirs();
}
System.err.println(pArchivePath);
ZipFile zipFile = null;
try {
zipFile = new ZipFile(pArchivePath);
Enumeration<?> enu = zipFile.entries();
while (enu.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) enu.nextElement();
String name = zipEntry.getName();
long size = zipEntry.getSize();
long compressedSize = zipEntry.getCompressedSize();
System.out.printf("name: %-20s | size: %6d | compressed size: %6d\n",
name, size, compressedSize);
File file = new File(name);
if (name.endsWith("/")) {
System.err.println("make dir " + name);
file.mkdirs();
continue;
}
File parent = file.getParentFile();
if (parent != null) {
parent.mkdirs();
}
InputStream is = zipFile.getInputStream(zipEntry);
FileOutputStream fos = new FileOutputStream(file);
byte[] bytes = new byte[1024];
int length;
while ((length = is.read(bytes)) >= 0) {
fos.write(bytes, 0, length);
}
is.close();
fos.close();
}
zipFile.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (zipFile != null) {
try {
zipFile.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解压缩档案。它包含7zip或Winrar作为.zip存档但重命名为.qtz(但我不知道这会导致问题..) 因此,如果我运行代码解压缩我的存档一切正常:我得到sysout / err上的输出列出所有文件,也没有异常发生,但如果我查看目标目录...它是空的 - 只是根文件夹存在。
我也用过
Runtime.getRuntime().exec(String.format("unzip %s -d %s", pArchivePath, dest.getPath()));
但是我不能再使用它了,因为启动了一个新流程,并且我在java代码中解压缩过程后继续处理存档。
那么问题是..为什么代码的和平不起作用?有很多类似的例子,但没有一个适合我。
br,Philipp
编辑:以下解决了我的问题
File file = new File(dir.getParent(), name);
所以我没有为这个文件设置正确的父路径。
答案 0 :(得分:0)
我在想,因为我没有看到你做这样的事情:
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath+ "Zip.zip"));
out.putNextEntry(new ZipEntry("Results.csv"));
我仍在努力,但我认为这个问题是因为这使得文件在zip内部
你也应该使用ZipOutputStream来写;喜欢
out.write(bytes, 0, length);
答案 1 :(得分:0)
代码中的以下片段:
File parent = file.getParentFile();
if (parent != null) {
parent.mkdirs();
}
这在哪里创建父目录?因为我尝试了你的代码并且它不在目标目录中创建,而是在我的Eclipse项目目录中创建。查看代码,目标目录无处可用,对吧?
代码实际上提取了zip文件的内容,但没有提到我预期的内容。