1

I wanted to test the possibility of java (version 1.8.0_25) to change file or directory permissions using File class, so i created the following small test:

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();
    }
}

I tested it on linux using root and standard user and i get the same following result:

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

But when i tested it on Windows using standard and Admin user i get the following result:

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

i tried even to wrap my jar into exe using launch4j and launching the exe with admin privilege but i get always the same result on windows.

Can anyone explain me why only setWritable on file is working and others permissions doesn't work correctly on Windows ?

Naruto Biju Mode
  • 2,011
  • 3
  • 15
  • 28

1 Answers1

0

Use java nio U can see here Manipulating Windows file permissions in Java There may not be a ready to use API in Java to accomplish the permission change...

Community
  • 1
  • 1
eduyayo
  • 2,020
  • 2
  • 15
  • 35