代码:
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上创建的文件没有组写权限。
答案 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)
<强> 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()