【发布时间】: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 上不能正常工作?
【问题讨论】:
-
这可能与这里的问题相同:stackoverflow.com/q/5302269/466738
标签: java file permissions