gpt4 book ai didi

java文件和目录权限奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:20 25 4
gpt4 key购买 nike

我想测试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();
}
}

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

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 上总是得到相同的结果。

谁能解释一下为什么在 Windows 上只有文件上的 setWritable 可以正常工作而其他权限不能正常工作?

最佳答案

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

关于java文件和目录权限奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com