这是你的误解。在 Windows 中,冒号不是合法的文件名字符,而是句点 '.' 是。
第二个文件是有效的......它与C:/File..
. (即C://File..
和C:/File..
是相同的位置)
编辑:在这里看到这个问题:How to create a filename with a trailing period in Windows?
我已经在我的系统中尝试过,不幸的是我的结果好坏参半....上面的答案仍然很好读....
Edit2:我已经运行了以下代码,现在它适用于我:
File file = new File("\\\\?\\C:/Temp/File..");
FileOutputStream fos = new FileOutputStream(file);
fos.write("Foo".getBytes());
fos.close();
似乎该\\?\
构造适用于java.io.File
,但不适用于java.nio.file.Path
如果您打印出异常,您也会对问题所在有更多的了解......
java.nio.file.InvalidPathException: Illegal char <:> at index 7: C:/File::
at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:194)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:165)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:89)
at sun.nio.fs.WindowsPath.parse(WindowsPath.java:106)
at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:267)
at java.nio.file.Paths.get(Paths.java:95)