Search code examples
javafilepermissionsiofile-permissions

Setting file permissions returns FALSE always


The code:

File dir = new File(path);
boolean rc1 = dir.setExecutable(true, false);
boolean rc2 = dir.setReadable(true, false);
boolean rc3 = dir.setWritable(true, false);
if (!rc1 || !rc2 || !rc3){
    logger.warn("One of the permissions set returned false: rc1="+rc1+" rc2="+rc2+" rc3="+rc3 + " [for dir '"+dir+"']");
}

On Ubuntu all 3 calls return false. On my Windows only the 3rd call to setWritable returns false.

The target is to create the file/dir so the user (tomcat) and the group will be able to read/write.
BUT the file created on Ubuntu without permissions for the group to write.


Solution

  • I found the solution and will answer my own question:
    When setting permissions on file or directory, you first MUST actually create the directory or write the file and only then set the permissions.
    So, what I was doing at start was wrong:

    File dir = new File(path);
    boolean rc1 = dir.setExecutable(true, false);
    

    While actually need to:

    File dir = new File(path);
    dir.mkdirs();
    boolean rc1 = dir.setExecutable(true, false);
    boolean rc2 = dir.setReadable(true, false);
    boolean rc3 = dir.setWritable(true, false);
    

    or

        File f = new File(uploadedFileLocation);
        ImageIO.write(image, "jpg", f);
        boolean rc1 = f.setExecutable(true, false);
        boolean rc2 = f.setReadable(true, false);
        boolean rc3 = f.setWritable(true, false);
    

    Then it will work :)