file.exists在Windows和Linux上返回不同的结果

3

我知道在文件名周围添加空格技术上是一个错误,但我想知道为什么以下代码在Windows下返回true,而在Linux下返回false:

public static void main(String[] args) {
    File file = new File("some_file_that_exists ");  // note the whitespace at the end
    System.out.println(file.exists());
}

我正在使用Windows 7 64位操作系统,安装了jdk1.6.0_31。同时也在Linux 2.6.18上安装了jdk1.6.0_06。请注意文件名末尾没有空格。


2
可能是因为Windows不允许在结尾处使用空格,当Java调用操作系统时,操作系统会删除/不考虑结尾处的空格。而Linux允许在结尾处使用空格,因此进行精确检查。 - codingenious
你尝试过使用Java 7+和Files.exists()来做同样的事情吗? - fge
@Batty,我觉得你说得对...这可能是解释。你能把它作为答案添加吗? - M A
是的,只有理论解释。找不到证明。不过正在寻找中。 :) - codingenious
什么异常?一个InvalidPathException吗? - fge
显示剩余6条评论
1个回答

1
这可能是因为Windows不允许文件名末尾有空格,当Java调用操作系统时,操作系统会删除/忽略文件名末尾的空格。而Linux允许文件名末尾有空格,因此它会进行准确的检查并尝试找到文件名末尾有空格的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接