当前位置: 首页 > 知识库问答 >
问题:

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

林意蕴
2023-03-14

我试图将zip文件导出到一个目录,但遇到一个IOException,指出找不到文件路径。我知道这意味着父目录通常不存在,但是调试文件写入文件的行。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个答案

商冠玉
2023-03-14

问题是zip文件的路径中可能有尾随空格。例如,“Test where.zip”可以是文件名,因此java将文件夹视为“/Test where/”,并尝试创建该文件夹。Windows告诉java它成功了,但实际上它在“/Test Whatever/”创建了一个文件夹。在处理文件夹时,文件IO对此没有问题,但在写入文件时,它会在显式查找路径时完全崩溃。它不会像处理文件夹时那样截断多余的空白,正如您所期望的那样。

下面是我用来解析它的代码:

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

File newFile = new File(path);
 类似资料:
  • 喂, 我尝试使用doxygen从一组文件夹生成代码文档。我的文件夹结构是这样的: 然后在配置文件中我在“default”配置文件中有以下设置(在这里的文档和其他问题中有说明): 我正在Linux Ubuntu(12.04LTS)上使用Doxygen1.8.4。 提前感谢您的提示和提示。

  • 如果使用此功能删除目录中的所有文件。 但是每当我这样做时,我都会收到这个错误消息: 警告:rmdir(directory/12)[function.rmdir]:delete_文件中没有这样的文件或目录。php “directory/12”是我要删除的目录的正确名称。我不明白为什么它说它不存在,因为它存在!奇怪的是,即使我收到了错误信息,目录还是被删除了。 所以我在for循环之前添加了一行代码,它

  • 问题内容: 我正在尝试将具有叠加层的地图快照保存在caches目录中,并在其存在时进行检索。但是,尽管正在创建文件,但当我尝试检索它时,UIImage(contentsOfFile :)返回nil。我已经打印了写和读的文件路径,它们是相同的,并通过下载容器并检查目录来验证文件是否存在,并且文件确实存在。 知道这里的问题是什么吗? 问题答案: 那里的问题是您使用URL属性absoluteString

  • 在使用ProcessBuilder的目录()方法时,我试图在Java中运行一个子进程。但是,每当我使用目录()方法时,程序都会失败,说找不到文件。但是,该文件存在于工作目录中。 输出: 当我省略了catudory()方法并创建一个ProcessBuilder,例如:,它可以正常工作,firefox.exe成功启动。 这在Windows和Linux上都会发生。 我已经尝试了几个版本的启动命令(比如<

  • 这可能是一个非常基本的问题,但我尝试了各种选择,但都没有成功,因此请求帮助。我想在指定目录中创建一个文件。如果文件已经存在,我想向其添加数据。以下是我尝试的内容: Internet搜索要求使用以下内容: 但是它会在目录内创建空文件,并在目录外创建新文件并附加到它。而且很少有帖子建议不需要使用createNewFile()来创建文件。 我尝试了如下各种路径格式: 但它仍然不会在目录中创建文件。你能告

  • 问题内容: 我想使用Python在远程服务器上上传文件。我想事先检查远程路径是否确实存在,如果不存在,请创建它。用伪代码: 我正在考虑在Paramiko中执行命令来创建路径(例如)。我想出了这个: 但是这种解决方案对我来说听起来不太好,因为我先关闭了连接,然后再次重新打开。有更好的方法吗? 问题答案: SFTP支持常用的FTP命令(chdir,mkdir等),因此请使用以下命令: 要完全仿真,您可