【问题标题】:Getting FileNotFoundException while unzipping a zip file though Java通过 Java 解压缩 zip 文件时出现 FileNotFoundException
【发布时间】:2020-04-01 23:14:09
【问题描述】:

我有一个通过 Java 解压缩 zip 文件的方法。

这个方法很好用。

但最近我尝试使用此方法解压缩某个文件(最终输出.zip)但出现运行时异常。

下面是该方法的代码:

public static List<String> unzipFiles(File zipFile, File targetDirectory) {
    List<String> files = new ArrayList<String>();                       
    try (FileInputStream fileInputStream = new FileInputStream(zipFile); ZipArchiveInputStream zipInputStream = new ZipArchiveInputStream(new BufferedInputStream(fileInputStream));){                  
        ZipEntry zipEntry;
        while ((zipEntry = zipInputStream.getNextZipEntry()) != null) {
            int length;
            byte data[] = new byte[bufferGlb];
            String fileName = zipEntry.getName();
            File opFile = new File(targetDirectory, fileName);
            FileOutputStream fileOutputStream = new FileOutputStream(opFile);//This is the line where the exception is thrown
            BufferedOutputStream dest = new BufferedOutputStream(fileOutputStream, bufferGlb);
            while ((length = zipInputStream.read(data, 0, bufferGlb)) != -1) {
                dest.write(data, 0, length);
            }
            dest.flush();
            files.add(fileName);
            fileOutputStream.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } 
    return files;
}
//library import used:
//import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;

请务必注意,我可以使用 WinRar 成功解压缩此文件。

在上面的代码中,我得到异常的行用 cmets 标记。

我得到的异常的堆栈跟踪如下:

java.io.FileNotFoundException: final output/0123450.pdf (No such file or directory)
    at java.io.FileOutputStream.open0(Native Method) ~[?:1.8.0_191]
    at java.io.FileOutputStream.open(FileOutputStream.java:270) ~[?:1.8.0_191]
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213) ~[?:1.8.0_191]
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162) ~[?:1.8.0_191]
    at ZipUtility.unzipFiles(ZipUtility.java:281)

还有例外中提到的文件,0123450.pdf 实际上在 zip 文件中。 请帮忙。

【问题讨论】:

  • @GhostCatsaysReinstateMonica 该方法目前存在于一些不起眼的遗留项目中。我同意你的看法。我已经重构了方法并相应地编辑了我的问题,如果那是 heps
  • 你确定你提供了正确的文件路径(目录+文件名)。
  • @jnrdn0011 是的。事实上,如果你仔细看,FileNotFoundException 是针对 zip 文件中的一个 pdf 文件,而不是 zip 文件本身
  • 你的代码没有问题。问题出在您的 zip 文件中。
  • @jnrdn0011 我想知道 zip 文件有什么问题。反正现在明白了

标签: java zip apache-commons unzip


【解决方案1】:

我之前也遇到过类似的问题。 异常中提到的文件:

java.io.FileNotFoundException: final output/0123450.pdf (No such file or directory)
    at java.io.FileOutputStream.open0(Native Method) ~[?:1.8.0_191]
    at java.io.FileOutputStream.open(FileOutputStream.java:270) ~[?:1.8.0_191]
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213) ~[?:1.8.0_191]
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162) ~[?:1.8.0_191]
    at ZipUtility.unzipFiles(ZipUtility.java:281)

即 0123450.pdf 实际上位于文件夹 final output 中,而不是直接位于 zip 文件中。 尝试使用直接在其中包含文件的 zip 文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多