在PHP on Wndows上,我如何检测文件是否具有“只读”属性

时间:2016-02-01 23:51:41

标签: java windows security nio nio2

在Windows中,文件可能无法写入,因为用户由于访问控制列表权限而无权修改文件,或者只是因为为文件设置了只读属性。

我的应用程序是用Java编写的,这些条件中的任何一个都可能导致Files.isWritable(文件)失败,但是如何确定导致失败的条件,特别是我只想知道是否设置了只读属性。

我注意到有一个File.setReadOnly()方法(以及File.setWritable()),我假设在Windows上这只会设置属性,但是没有; t似乎是一个File.isReadOnly ()方法。

3 个答案:

答案 0 :(得分:2)

我使用此方法检查是否只读,(它使用自定义方法Platform .ifWindows()仅在Windows上运行,但您可以使用替代方法。)

private boolean isReadOnlyFile(Path file)
    {
        if(Platform.isWindows())
        {
            if (!file.toFile().canWrite())
            {
                DosFileAttributes dosAttr;
                try
                {
                    dosAttr = Files.readAttributes(file, DosFileAttributes.class);
                    if(dosAttr.isReadOnly())
                    {
                        return true;
                    }
                }
                catch (IOException e)
                {

                }
            }
        }
        return false;
    }

答案 1 :(得分:1)

使用canWrite()方法:

if(file.canWrite()) {
    System.out.println("you can write");
} else {
     System.out.println("you cannot write");
}

有用信息:

  

<强>返回:       当且仅当文件系统实际包含由此抽象路径名表示的文件且允许应用程序时才返回true   写入文件;否则就是假的。

     

<强>抛出:       SecurityException - 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)方法拒绝写入   访问文件

答案 2 :(得分:0)

唐&#39;吨。只是尝试打开文件输出。如果它不可写,它将失败。抓住异常然后处理它。不要试图预测未来。你可以测试它是错误的,或者它可以在测试和使用之间双向改变。