我有一个简单的程序在java temp directroy(/ tmp)下创建名为test12345678.bin的文件,并使用File.setExecutable执行chmod。之后,程序将进行验证,以确保生成的文件始终可以使用File.canExecute执行。
我在不同的环境中运行这个简单的程序,但是只有安装了Red Hat 6.5的环境才能解决canExecute总是返回“false”的问题。我还通过手动执行生成的文件及其可执行文件进行了测试,文件的权限是-rwxr-xr-x; 我在所有测试环境中使用的Java版本是相同的; 1.6.0_38。
在此之前,Red Hat 6.5在root / superuser下进行测试。经过下面讨论的一些讨论后,我将用户重新配置回普通用户,但仍然没有运气。任何1有关于这个canExecute on Red hat 6.5的想法吗?
In Java what exactly does File.canExecute() do?
http://bugs.java.com/bugdatabase/view_bug.do;jsessionid=8b833c54cb93d6c9cf416667dc02?bug_id=6379654
http://linux.die.net/man/2/access
File tmp = File.createTempFile( "test", ".bin" );
FileOutputStream o = new FileOutputStream( tmp );
try {
o.write( 255 );
o.flush();
o.close();
} catch ( IOException e ) {
e.printStackTrace();
System.out.println( "[IO_EXCEPTION] " + e.getMessage() );
} finally {
o.close();
}
tmp.setExecutable( true, true );
String path = tmp.getAbsolutePath();
File test= new File( path );
boolean ret = test.canExecute();
System.out.println("---> tmp file created " + path + "| executable? " + ret);
答案 0 :(得分:0)
您使用第一个链接回答了自己的问题:
In Java what exactly does File.canExecute() do?
结论是File.canExecute()只是转换为 本地posix调用access(path, X_OK)。
建议:
如果您只想检查文件权限位,请改用FilePermission。