当我用代码
但如果我使用代码
假设我当前所在路径为 E:\dir\,并且该目录下有一个名为 Test.java 的文件。其内容如下:
File file = new File("e:/");
来获取 java.lang.File 类时,它代表的是 e:\ 目录所对应的 File 类。但如果我使用代码
File file = new File("e:");
并且当前所在的路径是 E: 驱动器,那么它将代表当前目录所对应的 File 类。假设我当前所在路径为 E:\dir\,并且该目录下有一个名为 Test.java 的文件。其内容如下:
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("e:");
File[] files = file.listFiles();
for(File f: files){
System.out.println(f + " " + f.exists());
}
}
}
打开cmd工具,并导航到e:\dir目录,在其中执行以下命令:
E:\dir> javac Test.java
E:\dir> java Test
我收到了:
e:\Test.class false
e:\Test.java false
这是一个Java JDK的bug吗?
@JimGarrison提供的额外信息:
我运行了这段代码
public class Foo3
{
public static void main(String[] args) throws Exception
{
File f = new File("D:");
System.out.println(f.getCanonicalPath());
for (File x : f.listFiles())
System.out.println(x + " " + x.getCanonicalPath() + " " + x.getAbsolutePath() + " " + x.exists() + " " + x.getAbsoluteFile().exists());
}
}
我在D盘上运行的Eclipse中获得了以下输出:
D:\dev\src\pdxep
D:\.classpath D:\dev\src\pdxep\.classpath D:\dev\src\pdxep\.classpath false true
D:\.project D:\dev\src\pdxep\.project D:\dev\src\pdxep\.project false true
D:\.settings D:\dev\src\pdxep\.settings D:\dev\src\pdxep\.settings false true
D:\gallery D:\dev\src\pdxep\gallery D:\dev\src\pdxep\gallery false true
D:\pom.xml D:\dev\src\pdxep\pom.xml D:\dev\src\pdxep\pom.xml false true
D:\src D:\dev\src\pdxep\src D:\dev\src\pdxep\src false true
D:\target D:\dev\src\pdxep\target D:\dev\src\pdxep\target false true
这证实了有些有趣的事情正在发生。
Java Bug 8130462 似乎与此相关,因为它涉及到 Windows 中特定的相对路径和绝对路径问题。
File
中至少存在一个与绝对路径和相对路径有关的长期存在的错误,我怀疑这是另一个错误(或现有错误的结果,在我对问题的更新中链接了该错误)。 - Jim Garrison