Java:在File.isFile()的上下文中构成“普通”文件的是什么?

我遇到了file.isFile()返回false的情况,这表明该文件不是“正常”。 但是,我找不到“正常”含义的定义。 文档链接到Oracle状态:

如果文件不是目录,则该文件是正常的,此外,它还满足其他系统相关标准。

该文件归_www:staff所有,并具有权限-rw-r--r-- 。 该目录也归_www:staff所有,并拥有权限drwxrw-r-- 。 访问该文件的进程由bob:staff拥有。 该系统是MacOS 10.9。 该过程可以正常读取和加载并显示文件; 唯一的问题是对isFile()的调用返回false,这意味着Java认为它不是普通文件。

那么,回到更大的问题,即使文件存在,该调用在什么条件下将返回false,路径是否正确,文件是否可访问?

该目录也归_www:staff所有,并拥有权限drwxrw-r-- 。 访问该文件的进程由bob:staff拥有。

该进程在目录上没有“x”权限(检查)。 JVM用于执行File.isFile()的系统调用需要此权限。 此系统调用失败,因此就File.isFile()而言,该文件不存在。

在授予“r”权限的同时删除目录上的“x”权限几乎总是错误的。

在Unix系统中,文件可以是:

  • 常规文件
  • 目录
  • 符号链接
  • 命名管道
  • sockets
  • 设备文件
  • 门(Sun Solaris系统)

“Normal”文件指的是常规文件。 它是一种类型的文件,系统不会对文件的内部结构施加任何要求。