设置文件权限始终返回FALSE

uri*_*rir 7 java io permissions file-permissions file

代码:

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+"']");
}
Run Code Online (Sandbox Code Playgroud)

在Ubuntu上,所有3个调用都返回false.在我的Windows上,只有第三次调用setWritable会返回false.

目标是创建文件/目录,以便用户(tomcat)和组能够读/写.
但是在Ubuntu上创建的文件没有写入组的权限.

uri*_*rir 13

我找到了解决方案,并将回答我自己的问题:
在文件或目录上设置权限时,首先必须实际创建目录或编写文件,然后才设置权限.
所以,我在开始时所做的事情是错误的:

File dir = new File(path);
boolean rc1 = dir.setExecutable(true, false);
Run Code Online (Sandbox Code Playgroud)

虽然实际需要:

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);
Run Code Online (Sandbox Code Playgroud)

要么

    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);
Run Code Online (Sandbox Code Playgroud)

然后它会工作:)