设置文件权限始终返回FALSE

时间:2012-12-27 09:32:07

标签: java file permissions io file-permissions

代码:

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+"']");
}

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

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

4 个答案:

答案 0 :(得分:11)

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

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

虽然实际需要:

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

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

然后它会起作用:)

答案 1 :(得分:2)

来自javadocs的

<强> setExecutable(): 返回

当且仅当操作成功时才​​为true。 如果用户无权更改此抽象路径名的访问权限,则操作将失败。如果executable为false且基础文件系统未实现执行权限,则操作将失败。

此外,

文件(字符串路径名)           通过将给定的路径名​​字符串转换为抽象路径名来创建新的文件实例。 它创建一个文件实例。它创建新文件。

创建新文件

File f;
  f=new File("myfile.txt");
  if(!f.exists()){
  f.createNewFile();
  System.out.println("New file \"myfile.txt\" has been created 
  to the current directory");
  }

答案 2 :(得分:1)

也许你不是在Linux中以超级用户身份运行它。可能是您(登录为)本身无权授予文件权限。

答案 3 :(得分:0)

您需要调用createNewFile()