Linux下更改文件所有者组java.nio.Files(Change file owner gro

2019-07-03 14:45发布

我有一个Linux服务器,我运行在Java中的图像大小调整工作对我的服务器上的多个网站。 该网站文件由不同操作系统的用户/组拥有。 新创建缩略图/预览正在运行的调整大小作业的用户所拥有。 现在我身边googleing如何改变新创建的预览/缩略图文件所有者在我的大小调整方案,并跨越这来了:

java.nio.file.Files.setOwner(Path path, UserPrincipal owner);

这将真正解决我的问题,如果是Windows,但由于Linux的文件有一个用户和组作为所有者我有麻烦了一点。 不幸的是给定的方法似乎只能改变文件的用户所有权。 该集团所有权仍属于该组的用户运行我的Java大小调整工作。

该网站是由不同群体拥有的,所以加入我的大小调整工作的用户到一个组是没有选择。 我也想避免系统调用ProcessBuilder和执行chown我的文件。

我确实需要指出的是,创建的文件(预览/缩略图)可以通过网站进行访问,这是不是关键任务更改组所有权,但我希望它能够尽可能干净。

任何建议,我怎么可以改变只能使用Java在Linux中文件的组所有权?

Answer 1:

感谢吉姆·加里森指着我在正确的方向。 这里的代码,最终解决了这个问题对我来说。

检索文件的组所有者

File originalFile = new File("original.jpg"); // just as an example
GroupPrincipal group = Files.readAttributes(originalFile.toPath(), PosixFileAttributes.class, LinkOption.NOFOLLOW_LINKS).group();

设置文件的组所有者

File targetFile = new File("target.jpg");
Files.getFileAttributeView(targetFile.toPath(), PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS).setGroup(group);


Answer 2:

我错过了一个完整的解决方案,就到这里吧(其他答案和注释的组合):

Path p = your file's Path;
String group = "GROUP_NAME";
UserPrincipalLookupService lookupService = FileSystems.getDefault()
            .getUserPrincipalLookupService();
GroupPrincipal group = lookupService.lookupPrincipalByGroupName(group);
Files.getFileAttributeView(p, PosixFileAttributeView.class,
            LinkOption.NOFOLLOW_LINKS).setGroup(group);

请注意,只有文件的拥有者可以改变它的组,只有一组,他是成员...



Answer 3:

看看包装java.nio.file.attributes和类PosixFilePermissions 。 在这里,您可以操纵组权限。



文章来源: Change file owner group under Linux with java.nio.Files