在Java中,File.canExecute()具体做什么?

在Java中,File.canExecute()具体做什么?,java,file,permissions,io,Java,File,Permissions,Io,我创建了一个没有执行权限的普通文件,但当我使用该文件的路径/名称创建一个Java文件对象,然后调用file.canExecute()时,结果为true,而我希望该方法调用返回false。有人能解释一下我遗漏了什么吗 Solaris: $ touch /tmp/nonexecutable $ ls -l /tmp/nonexecutable -rw-r--r-- 1 root root 0 May 21 07:48 /tmp/nonexecutable 爪哇: 提

我创建了一个没有执行权限的普通文件,但当我使用该文件的路径/名称创建一个Java文件对象,然后调用file.canExecute()时,结果为true,而我希望该方法调用返回false。有人能解释一下我遗漏了什么吗

Solaris:

$ touch /tmp/nonexecutable
$ ls -l /tmp/nonexecutable
-rw-r--r--   1 root     root           0 May 21 07:48 /tmp/nonexecutable
爪哇:

提前感谢你的帮助


--James

虽然我不是专家,这不能正确回答您的问题,但我想补充一点,这种行为并不是Java特有的。在我的Ubuntu 8.10安装的find(GNU findutils)4.4.0手册页中,关于
-executable
标志:

匹配以下文件: 可执行文件和目录 可搜索(在文件名解析中) 感觉)。这考虑到 访问控制列表和其他
-perm
测试忽略。这项测试使 使用系统调用, 因此可以被NFS服务器愚弄 UID映射(或 根挤压),因为许多系统 在客户端中实现
访问(2)
内核,因此不能使用 服务器上保存的UID映射信息 服务器。因为这个测试是 仅基于测试结果
访问(2)
系统调用,没有 保证此 测试成功实际上可以是 已执行


与Java无关-您是以root用户身份运行的,root用户可以执行所有操作,无论权限如何。

以下是一个在JDK上打开的错误:

结论是File.canExecute()简单地转换为本机posix访问调用(path,X_OK)。当以root用户身份运行时,Linux为该调用返回false,solaris为该调用返回true


最后,该错误被关闭,因为它无法修复!:)

他的帖子中没有任何内容表明他是以root身份运行的。该文件由root.root所有,并且刚刚创建,表明OP是以root身份运行的。我刚刚编写了一些代码,创建了一个新文件,断言canExecute为false,然后执行chmod exec调用,打开执行位。现在canExecute返回true。这是因为我是以自己的身份而不是以根的身份来做这一切吗?
String pathName = "/tmp/nonexecutable";
File myFile = new File(pathName);
if (!myFile.canExecute())
{
    String errorMessage = "The file is not executable.";
    log.error(errorMessage);
    throw new RuntimeException(errorMessage);
}