为什么isDirectory对于File(“c:”)是真的?

时间:2014-04-25 07:38:52

标签: java

当我创建像

这样的File对象时
File f = new File("c:")

然后调用方法isDirectory(),它返回true为什么?

该程序假设显示该目录中的所有文件并且正常工作,除非我使用" c:"。它不是访问" c:\",而不是主路径,而是访问程序正在执行的目录。我真的不明白。

3 个答案:

答案 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