我正在尝试将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(复制并粘贴要写入的文件的名称)也不会引起任何问题。
答案 0 :(得分:0)
问题是zip文件的路径中可能有尾随空格。例如,"测试任何.zip"可以是文件名,因此java将文件夹视为" /测试任何/"并尝试创建该文件夹。 Windows告诉java它成功了,但实际上它在" / Test Whatever /"中创建了一个文件夹。在处理文件夹时,文件IO对此没有任何问题,但在编写文件时,它会完全爆炸,因为它会明确地查找路径。它没有像处理文件夹那样截断额外的空白区域,就像你期望的那样。
以下是我用来解决它的代码:
String path = (outputFolder + File.separator + fileName).replace(" ", "");
File newFile = new File(path);