在Java中,File.canExecute()具体做什么?
我创建了一个没有执行权限的普通文件,但当我使用该文件的路径/名称创建一个Java文件对象,然后调用file.canExecute()时,结果为true,而我希望该方法调用返回false。有人能解释一下我遗漏了什么吗 Solaris:在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 爪哇: 提
$ 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);
}