当我创建像
这样的File对象时File f = new File("c:")
然后调用方法isDirectory()
,它返回true
。 为什么?
该程序假设显示该目录中的所有文件并且正常工作,除非我使用" c:"。它不是访问" c:\",而不是主路径,而是访问程序正在执行的目录。我真的不明白。
答案 0 :(得分:6)
在Windows中,为每个驱动器保留当前工作目录(A:,B:,C:等)。
如果在未指定目录的情况下使用驱动器,则表示该驱动器的当前工作目录。
C: refers to the current working directory of drive C:
C:\ refers to the root directory of drive C:
在您的情况下,C:的当前工作目录是程序文件所在的目录。
答案 1 :(得分:0)
这是一个有趣的问题。我会尝试扩展你的问题(问题应该随时都有SSCCE)......
以此代码为例:
public class Main{
public static void main(String[] args){
File f = new File("C:\\");
System.out.println("C:\\ is directory: " + f.isDirectory());
System.out.println("C:\\ exists: " + f.exists());
System.out.println("C:\\ absolute path: " + f.getAbsolutePath());
System.out.println();
f = new File("C:");
System.out.println("C: is directory: " + f.isDirectory());
System.out.println("C: exists: " + f.exists());
System.out.println("C: absolute path: " + f.getAbsolutePath());
System.out.println();
f = new File("X:");
System.out.println("X: is directory: " + f.isDirectory());
System.out.println("X: exists: " + f.exists());
System.out.println("X: absolute path: " + f.getAbsolutePath());
System.out.println();
}
}
(注意我有一个C:驱动器,我没有X:驱动器) 这导致了这个输出:
C:\是目录:true C:\ exists:true C:\绝对路径:C:\
C:是目录:true C:存在:是的 C:绝对路径:C:\ Users \ kworkman \ Desktop \ Tests
X:是目录:false X:存在:false X:绝对路径:X:
所以它似乎正确地处理了C:\,但C:本身导致了一个实际上并不存在的目录的奇怪输出。这是奇怪的,因为它似乎正确处理X:案例。
答案 2 :(得分:-1)
请尝试C:\
。
File f = new File("C:\\");
System.out.println(f.getAbsolutePath());
System.out.println(f.isDirectory());
System.out.println(f.isFile());
输出:
C:\
true
false