通过Java解压zip文件时获取FileNotFoundException

通过Java解压zip文件时获取FileNotFoundException,java,zip,apache-commons,unzip,Java,Zip,Apache Commons,Unzip,我有一个通过Java解压zip文件的方法 这种方法效果很好 但最近我试图用这个方法解压某个文件(final output.zip),但遇到了一个运行时异常 下面是该方法的代码: public static List<String> unzipFiles(File zipFile, File targetDirectory) { List<String> files = new ArrayList<String>();

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

这种方法效果很好

但最近我试图用这个方法解压某个文件(final output.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;
公共静态列表unzipFiles(文件zipFile,文件targetDirectory){
列表文件=新的ArrayList();
try(FileInputStream FileInputStream=newfileinputstream(zipFile);ZipArchiveInputStream zipInputStream=new ZipArchiveInputStream(new BufferedInputStream(FileInputStream));{
齐彭特里;
而((zipEntry=zipInputStream.getNextZipEntry())!=null){
整数长度;
字节数据[]=新字节[bufferGlb];
字符串文件名=zipEntry.getName();
File opFile=新文件(targetDirectory,文件名);
FileOutputStream FileOutputStream=newfileoutputstream(opFile);//这是引发异常的行
BufferedOutputStream dest=新的BufferedOutputStream(fileOutputStream,bufferGlb);
while((length=zipInputStream.read(data,0,bufferGlb))!=-1){
目标写入(数据,0,长度);
}
dest.flush();
添加(文件名);
fileOutputStream.close();
}
}捕获(例外e){
e、 printStackTrace();
} 
归还文件;
}
//使用的库导入:
//导入org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
需要注意的是,我能够使用WinRar成功解压缩此文件

在上面的代码中,我获取异常的那一行用注释标记

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

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)
java.io.FileNotFoundException:final output/0123450.pdf(没有这样的文件或目录)
在java.io.FileOutputStream.open0(本机方法)~[?:1.8.0_191]
在java.io.FileOutputStream.open(FileOutputStream.java:270)~[?:1.8.0_191]
在java.io.FileOutputStream.(FileOutputStream.java:213)~[?:1.8.0_191]
在java.io.FileOutputStream.(FileOutputStream.java:162)~[?:1.8.0_191]
在ZipUtility.unzipFiles(ZipUtility.java:281)
此外,例外情况中提到的文件,
0123450.pdf
实际上在zip文件中。
请帮忙。

我以前也遇到过类似的问题。 例外情况中提到的文件:

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)
java.io.FileNotFoundException:final output/0123450.pdf(没有这样的文件或目录)
在java.io.FileOutputStream.open0(本机方法)~[?:1.8.0_191]
在java.io.FileOutputStream.open(FileOutputStream.java:270)~[?:1.8.0_191]
在java.io.FileOutputStream.(FileOutputStream.java:213)~[?:1.8.0_191]
在java.io.FileOutputStream.(FileOutputStream.java:162)~[?:1.8.0_191]
在ZipUtility.unzipFiles(ZipUtility.java:281)
i、 e 0123450.pdf实际上位于文件夹
最终输出
中,而不是直接位于zip文件中。
尝试使用一个zip文件,其中直接包含文件

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