Java File.canExecute()总是在Red Hat 6.5上返回false

时间:2014-04-18 02:57:58

标签: java unix redhat java-io

我有一个简单的程序在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);

1 个答案:

答案 0 :(得分:0)

您使用第一个链接回答了自己的问题:

In Java what exactly does File.canExecute() do?

  

结论是File.canExecute()只是转换为   本地posix调用access(path, X_OK)

建议:

如果您只想检查文件权限位,请改用FilePermission