【问题标题】:java file and directory permissions weird behaviorjava文件和目录权限奇怪的行为
【发布时间】:2014-11-15 01:46:09
【问题描述】:

我想测试java(1.8.0_25版)使用File类更改文件或目录权限的可能性,所以我创建了以下小测试:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Test
{
    public static void main(String[] args) throws IOException
    {
        File log = new File("Mylog.txt");
        log.createNewFile();
        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(log)));

        File dir = new File("Test");
        dir.mkdir();

        File file = new File(dir, "file.txt");
        file.createNewFile();

        pw.println("File : setWritable(false)  " + file.setWritable(false,false));
        pw.println("Dir  : setWritable(false)  " + dir.setWritable(false,false));
        pw.println();
        pw.println("File : setWritable(true)  " + file.setWritable(true,false));
        pw.println("Dir  : setWritable(true)  " + dir.setWritable(true,false));

        pw.println("\n");

        pw.println("File : setReadable(false)  " + file.setReadable(false,false));
        pw.println("Dir  : setReadable(false)  " + dir.setReadable(false,false));
        pw.println();
        pw.println("File : setReadable(true)  " + file.setReadable(true,false));
        pw.println("Dir  : setReadable(true)  " + dir.setReadable(true,false));

        pw.println("\n");

        pw.println("File : setExecutable(false)  " + file.setExecutable(false,false));
        pw.println("Dir  : setExecutable(false)  " + dir.setExecutable(false,false));
        pw.println();
        pw.println("File : setExecutable(true)  " + file.setExecutable(true,false));
        pw.println("Dir  : setExecutable(true)  " + dir.setExecutable(true,false));

        pw.close();
    }
}

我在 linux 上使用 root 和标准用户对其进行了测试,得到了相同的结果:

File : setWritable(false)  true
Dir  : setWritable(false)  true

File : setWritable(true)  true
Dir  : setWritable(true)  true


File : setReadable(false)  true
Dir  : setReadable(false)  true

File : setReadable(true)  true
Dir  : setReadable(true)  true


File : setExecutable(false)  true
Dir  : setExecutable(false)  true

File : setExecutable(true)  true
Dir  : setExecutable(true)  true

但是当我在 Windows 上使用标准用户和管理员用户对其进行测试时,我得到以下结果:

File : setWritable(false)  true
Dir  : setWritable(false)  false

File : setWritable(true)  true
Dir  : setWritable(true)  false


File : setReadable(false)  false
Dir  : setReadable(false)  false

File : setReadable(true)  true
Dir  : setReadable(true)  true


File : setExecutable(false)  false
Dir  : setExecutable(false)  false

File : setExecutable(true)  true
Dir  : setExecutable(true)  true

我什至尝试使用 launch4j 将我的 jar 包装到 exe 中,并以管理员权限启动 exe,但我在 windows 上总是得到相同的结果。

谁能解释一下为什么只有 setWritable on file 有效,而其他权限在 Windows 上不能正常工作?

【问题讨论】:

标签: java file permissions


【解决方案1】:

使用java nio 你可以在这里看到Manipulating Windows file permissions in Java Java 中可能没有现成可用的 API 来完成权限更改...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2017-11-03
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多