17

Linuxサーバーがあり、サーバー上の複数のWebサイトに対してJavaで画像サイズ変更ジョブを実行しています。Webサイトのファイルは、さまざまなOSユーザー/グループが所有しています。新しく作成されたサムネイル/プレビューは、サイズ変更ジョブを実行しているユーザーが所有します。今、私はサイズ変更プログラムで新しく作成されたプレビュー/サムネイルのファイル所有者を変更する方法をグーグルで調べていて、これに出くわしました:

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

これは、Windowsの場合は本当に問題を解決しますが、Linuxファイルにはユーザーとグループが所有者として含まれているため、少し問題があります。残念ながら、与えられた方法はファイルのユーザー所有権を変更するだけのようです。グループの所有権は、Javaサイズ変更ジョブを実行しているユーザーのグループに残ります。

Webサイトはさまざまなグループによって所有されているため、サイズ変更ジョブのユーザーを1つのグループに追加することはできません。また、ファイルでのシステムコールを避けProcessBuilderて実行したいとchown思います。

作成されたファイル(プレビュー/サムネイル)はWebサイトからアクセスでき、グループの所有権を変更することはミッションクリティカルではありませんが、できるだけクリーンにしたかったことを指摘する必要があります。

Javaのみを使用してLinuxでファイルのグループ所有権を変更する方法についての提案はありますか?

4

3 に答える 3

32

私を正しい方向に向けてくれたジム・ギャリソンに感謝します。ここに、最終的に私にとって問題を解決したコードがあります。

ファイルのグループ所有者を取得する

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);
于 2012-11-11T20:37:23.070 に答える
16

私は完全な解決策を逃しました、ここに来ます(他の答えとコメントの組み合わせ):

Path p = Paths.get("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);

ファイルの所有者のみがそのグループを変更でき、彼がメンバーであるグループにのみ変更できることに注意してください...

于 2014-02-17T19:01:38.880 に答える
3

パッケージjava.nio.file.attributesとクラスを見てくださいPosixFilePermissions。ここで、グループのアクセス許可を操作できます。

于 2012-11-05T23:36:30.693 に答える