我有一个Linux服务器,我运行在Java中的图像大小调整工作对我的服务器上的多个网站。 该网站文件由不同操作系统的用户/组拥有。 新创建缩略图/预览正在运行的调整大小作业的用户所拥有。 现在我身边googleing如何改变新创建的预览/缩略图文件所有者在我的大小调整方案,并跨越这来了:
java.nio.file.Files.setOwner(Path path, UserPrincipal owner);
这将真正解决我的问题,如果是Windows,但由于Linux的文件有一个用户和组作为所有者我有麻烦了一点。 不幸的是给定的方法似乎只能改变文件的用户所有权。 该集团所有权仍属于该组的用户运行我的Java大小调整工作。
该网站是由不同群体拥有的,所以加入我的大小调整工作的用户到一个组是没有选择。 我也想避免系统调用ProcessBuilder
和执行chown
我的文件。
我确实需要指出的是,创建的文件(预览/缩略图)可以通过网站进行访问,这是不是关键任务更改组所有权,但我希望它能够尽可能干净。
任何建议,我怎么可以改变只能使用Java在Linux中文件的组所有权?
感谢吉姆·加里森指着我在正确的方向。 这里的代码,最终解决了这个问题对我来说。
检索文件的组所有者
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
。 在这里,您可以操纵组权限。