isFile()的java文件也可以是isDirectory()吗?

时间:2012-05-18 05:47:31

标签: java file

以下测试通过:

    File aDir = new File("aDir");
    assertTrue(aDir.exists());
    assertTrue(aDir.isDirectory());
    assertFalse(aDir.isFile());

    File aFile = new File("aFile");
    assertTrue(aFile.exists());
    assertFalse(aFile.isDirectory());
    assertTrue(aFile.isFile());

    File awol = new File("notInFileSystem");
    assertFalse(awol.exists());
    assertFalse(awol.isDirectory());
    assertFalse(awol.isFile());

在事物的表面上,似乎暗示对于file.isFile()为真的所有文件,file.isDirectory()都是错误的。是否有任何已知类型的文件系统/文件类型/ java平台,这个假设不成立?

可能行为略有不同的文件类别(符号链接,连接点,符号链接/缺少目标的连接点等)存在各种各样的狂野

2 个答案:

答案 0 :(得分:7)

看看JavaDoc,似乎总是如此:

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#isFile()

isDirectory:

  

当且仅当此抽象路径名表示的文件存在时才为true      并且是一个目录;否则是假的

ISFILE:

  

当且仅当此抽象路径名表示的文件存在时才为true      并且是一个普通的文件;否则是假的      如果文件不是目录,则该文件是正常的,此外,      满足其他系统依赖标准。任何非目录文件      由Java应用程序创建的文件保证是普通文件。

答案 1 :(得分:1)

来自documentation

isFile()

  

测试此抽象路径名表示的文件是否为普通文件。如果文件不是目录,则该文件是正常的,此外,它还满足其他系统相关标准。由Java应用程序创建的任何非目录文件都保证是普通文件。

这绝对意味着,如果isFile() 为真,则isDirectory()必须为 false 。根据{{​​1}} doc中的措辞,反之亦然。