簡體   English   中英

java文件和目錄權限的怪異行為

[英]java file and directory permissions weird behavior

我想測試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

但是,當我使用標准用戶和Admin用戶在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起作用,而其他權限在Windows上卻不能正常起作用?

使用java nio U可以在這里看到在Java中操作Windows文件權限在Java中可能沒有現成的可使用API​​來完成權限更改...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM