[英]Change file owner group under Linux with java.nio.Files
我有一台Linux服務器,我在Java上為我服務器上的多個網站運行圖像大小調整作業。 網站文件歸不同的OS用戶/組所有。 新創建的縮略圖/預覽由運行調整大小作業的用戶擁有。 現在,我正在調整如何在我的調整大小程序中更改新創建的預覽/縮略圖的文件所有者,並發現了這個:
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
。 您可以在此處理組權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.