尽管存在父目录,但无法找到指定的路径创建文件

时间:2018-01-16 22:17:10

标签: java file zip

我正在尝试将zip文件导出到目录并运行到IOException,指出无法找到文件路径。我知道这意味着父目录通常不存在,但是调试正在写入文件的行file.getParentFile()。exists()返回true,所以这不是我的问题。更复杂的是,这只发生在大约一半的文件中。通过java解压缩时始终是相同的文件失败,但通过Windows解压缩它们总是成功运行。

以下是我正在使用的代码:

ZipInputStream zis =
                new ZipInputStream(new ByteArrayInputStream(zipFile));
ZipEntry ze = zis.getNextEntry();

while (ze != null) {
    String fileName = ze.getName();
    File newFile = new File(outputFolder + File.separator + fileName);
    if(!newFile.isDirectory()) {
        newFile.getParentFile().mkdirs();
        FileOutputStream fos = new FileOutputStream(newFile); //Exception occurs here
        //newFile.getParentFile().exists() returns true 
        //copying the path for newFile.getParentFile() into my file browser leads me to a valid, existing folder
        //I have tried newFile.createNewFile() and that errors with a similar exception

        int len;
        while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }

        fos.close();
        results.add(new Foo());
    }
    ze = zis.getNextEntry();
}

示例异常:

java.io.FileNotFoundException: \\foo\foo\foo\foo\foo\foo\foo.pdf (The system cannot find the path specified)

有关系统的更多说明:文件系统是远程网络驱动器,系统正在运行Windows,并且该帐户具有对驱动器的完全写入权限。我还验证了命名文件foo.pdf(复制并粘贴要写入的文件的名称)也不会引起任何问题。

1 个答案:

答案 0 :(得分:0)

问题是zip文件的路径中可能有尾随空格。例如,"测试任何.zip"可以是文件名,因此java将文件夹视为" /测试任何/"并尝试创建该文件夹。 Windows告诉java它成功了,但实际上它在" / Test Whatever /"中创建了一个文件夹。在处理文件夹时,文件IO对此没有任何问题,但在编写文件时,它会完全爆炸,因为它会明确地查找路径。它没有像处理文件夹那样截断额外的空白区域,就像你期望的那样。

以下是我用来解决它的代码:

String path = (outputFolder + File.separator + fileName).replace(" ", "");

File newFile = new File(path);