我在我的java程序(在linux上运行)中创建了一个文件夹,其中包含File对象的mkdirs()函数。问题是该文件夹仅获取该组的读取权限。我需要它还具有写权限(以便以后能够删除它的文件)。这样做的方法是什么?
答案 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命令。
编辑:Woops,我完全错了;我没注意到你特别想要组权限。如果没有Runtime.exec(),那些似乎不可设置。@David:你是对的。
另一个想法:如果要更改大量文件,那么编写shell脚本并从runtime.exec()调用它会怎么样?