java.io.IOException 的可能原因是什么:“文件名、目录名或卷标语法不正确”

新手上路,请多包涵

我正在尝试使用以下代码复制文件:

 File targetFile = new File(targetPath + File.separator + filename);
...
targetFile.createNewFile();
fileInputStream = new FileInputStream(fileToCopy);
fileOutputStream = new FileOutputStream(targetFile);
byte[] buffer = new byte[64*1024];
int i = 0;
while((i = fileInputStream.read(buffer)) != -1) {
    fileOutputStream.write(buffer, 0, i);
}

对于某些用户 targetFile.createNewFile 导致此异常:

 java.io.IOException: The filename, directory name, or volume label syntax is incorrect
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:850)

文件名和目录名似乎是正确的。在执行复制代码之前,甚至会检查目录 targetPath 是否存在,文件名如下所示: AB_timestamp.xml

用户对 targetPath 具有写入权限,并且可以使用操作系统毫无问题地复制文件。

由于我无法访问发生这种情况的机器,并且无法在我自己的机器上重现该问题,因此我向您寻求有关此异常原因的提示。

原文由 Turismo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

试试这个,因为它更注意调整 targetPath 和文件名之间路径中的目录分隔符:

 File targetFile = new File(targetPath, filename);

原文由 Alexander 发布,翻译遵循 CC BY-SA 2.5 许可协议

当文件名具有带冒号的时间戳时,可能会发生这种情况,例如。 myfile_HH:mm:ss.csv 删除冒号解决了这个问题。

原文由 Adam Hughes 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏