创建具有该组写入权限的目录

时间:2009-02-19 06:21:45

标签: java linux

我在我的java程序(在linux上运行)中创建了一个文件夹,其中包含File对象的mkdirs()函数。问题是该文件夹仅获取该组的读取权限。我需要它还具有写权限(以便以后能够删除它的文件)。这样做的方法是什么?

4 个答案:

答案 0 :(得分:9)

Java nio可以帮助处理posix文件属性: https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFileAttributeView.html

Path path = ...
 Set<PosixFilePermission> perms =
     EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_WRITE);
 Files.createFile(path, PosixFilePermissions.asFileAttribute(perms));

答案 1 :(得分:2)

我怀疑(除非有人发布相反的答案)在Java的标准库中无法做到这一点,因为POSIX组权限(您习惯使用的rwxrwxrwx类型)不是跨平台的。 Java 6将允许您设置所有者权限或全局权限,但(据我所知)不是组权限。如果你真的必须这样做,请尝试使用Runtime.exec("chmod g+w directory"),但在风格上将它包装在像setGroupWritable()这样的方法中可能是一个好主意。

答案 2 :(得分:1)

好的,这不是一个java解决方案,绝对不可移植。

既然你提到你是linux,你可能会考虑检查“umask”设置并正确设置(使用组写权限创建目录),然后启动你的java程序。

答案 3 :(得分:-1)

在java 6上,有一些方法允许你这样做,比如setwriteable()。在以前的java版本中,您必须访问命令行才能执行chmod命令。

Java 6 SE File Class Doc.

编辑:Woops,我完全错了;我没注意到你特别想要组权限。如果没有Runtime.exec(),那些似乎不可设置。

@David:你是对的。

另一个想法:如果要更改大量文件,那么编写shell脚本并从runtime.exec()调用它会怎么样?