Java File.exists()与File.isFile()

jac*_*646 5 java java-io java.nio.file

我无法想到java.io.File.exists()Java 7中该方法或其等价物的实际用例java.nio.file.Files.exists(Path).看来,isFile()isDirectory()会在所有情况下最好(或canRead(),canWrite()等等).

例如,在如何检查Java中是否存在文件?,第二个答案指出,接受的答案似乎很愚蠢.

任何人都可以给出一个例子,知道事物是否存在是有用的,而不知道事物是文件还是目录?

编辑:我明白了什么File.exists().我的问题是,该功能何时能帮助某人?我正在寻找一个例子," File.exists()在_ _ _ _ _ _时使用,因为在这种情况下既不添加File.isFile()也不File.isDirectory()添加任何值."


回想起来,我认为我在这里的困惑是关于File类的JavaDoc中两个看似矛盾的陈述.第一句将班级定义为,

文件和目录路径名的抽象表示.

这听起来像是一个明显的二分法; 但进一步说,医生反驳,

此类的实例可能表示也可能不表示实际的文件系统对象,例如文件或目录.

我认为第三个文件系统对象的例子在文档中会有很大的帮助; 但是这个类别似乎甚至缺少一个名称,导致JavaDoc对Files类的尴尬措辞:静态方法的集合,

对文件,目录或其他类型的文件进行操作.

在接受的答案中,@ korral将这些其他类型称为"特殊文件".这似乎对我很敏感.他们是如此特别,我不知道他们存在.

kor*_*ral 7

回答@ jaco0646的最后一个问题:

使用File.exists() 特殊的文件打交道时喜欢命名管道,插座或设备文件.

这些都不是普通的文件,也没有目录,也没有符号链接这样既File.isFile()File.isDirectory()返回falseFile.exists()将返回true.例如/dev/null(在兼容Unix的操作系统上)是一个设备文件.

从理论上讲,处理大量文件时可能会出现性能差异.这还取决于文件系统,JVM实现细节,操作系统等.

例如.在Android File.exists()上使用/ use时使用access()系统调用实现.在这种情况下,处理输出在用户空间中需要更多逻辑.File.isFile()File.isDirectory()stat()stat()access()