Java解压缩-没有异常,但结果为空



我正在使用来自web 的以下代码

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: %6dn", 
                    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);

所以我没有为这个文件设置正确的父路径。

代码中的以下片段:

       File parent = file.getParentFile();
        if (parent != null) {
            parent.mkdirs();
        }

这在哪里创建父目录?因为我尝试了您的代码,它不是在目标目录中创建的,而是在Eclipse的项目目录中创建。查看您的代码,目标目录没有被使用,对吧?

该代码实际上提取了zip文件的内容,但不是我期望的内容。

我在想,因为我没有看到你做这样的事情:

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath+ "Zip.zip"));
out.putNextEntry(new ZipEntry("Results.csv"));

我仍在处理它,但我认为这个问题是因为它使文件在zip 中

此外,您可能应该使用ZipOutputStream进行编写;像

out.write(bytes, 0, length);

相关内容

  • 没有找到相关文章

最新更新