繁体   English   中英

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

[英]Create directory with write permissions for the group

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

一个非常简单的解决方案是:

file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);

在上面的代码中,file是一个File对象。

在创建文件集时,对文件setExecutable(true)这些权限将允许您将该文件设置为仅对所有者的Executable 如果你添加一个我在上面的代码中添加的参数file.setExecutable(true, false); 将仅为所有者设置Executable false ,这意味着它将为所有组/世界设置权限。

测试并使用Debian和Windows XP。

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

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

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

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

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

Java 6 SE文件类文档。

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

@David:你是对的。

另一个想法:如果你有很多文件要改变,那么编写一个shell脚本并从runtime.exec()调用它怎么样?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM