使用java.nio.Files在Linux下更改文件所有者组

我有一个Linux服务器,我正在运行在我的服务器上的多个网站在Java中的图像大小调整作业。 网站文件由不同的OS用户/组拥有。 新创build的缩略图/预览属于运行resize作业的用户。 现在我正在谷歌周围如何更改我的resize程序中新创build的预览/缩略图的文件所有者,并遇到这种情况:

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

这将真正解决我的问题,如果它是Windows,但由于Linux文件有一个用户和一个组作为所有者我有点麻烦。 不幸的是,给出的方法似乎只改变了文件的用户所有权。 组的所有权保留在运行我的Javaresize作业的用户组中。

这些网站是由不同团体拥有的,所以将我的resize的工作用户添加到一个群组是不行的。 我也想避免使用ProcessBuilder进行系统调用,并对我的文件执行chown

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

任何build议如何我只能使用Java在Linux中更改文件的组所有权?

Solutions Collecting From Web of "使用java.nio.Files在Linux下更改文件所有者组"

感谢Jim Garrison指引我正确的方向。 这里的代码,终于为我解决了这个问题。

检索文件的组所有者

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

我错过了一个完整的解决方案,它来了(其他答案和评论的组合):

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

请注意,只有文件的所有者才能更改其组,并且只能是他所属的组。

看看包java.nio.file.attributes和类PosixFilePermissions 。 这是你可以操纵组权限的地方。