Java API を使用してファイルのグループを変更するにはどうすればよいですか? Files.setOwner
(Java 7) を使用してファイルの所有者を設定できることはわかっています。
Unix OS でファイルのグループを変更するにはどうすればよいですか?
解決策:
UserPrincipalLookupService lookupservice = FileSystems.getDefault()
.getUserPrincipalLookupService();
final UserPrincipal superuser = lookupservice
.lookupPrincipalByName("superuser");
final GroupPrincipal servicesGroup = lookupservice
.lookupPrincipalByGroupName("services");
FileVisitor<Path> visitor = new FileVisitor<Path>() {
@Override
public FileVisitResult postVisitDirectory(Path dir,
IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path file,
BasicFileAttributes attrs) throws IOException {
setOwnerAndGroupForFile(superuser, servicesGroup, file);
File[] listFiles = file.toFile().listFiles();
for (File file1 : listFiles) {
Files.walkFileTree(file1.toPath(), this);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
setOwnerAndGroupForFile(superuser, servicesGroup, file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file,
IOException exc) throws IOException {
outputError("Problems while accesing file " + file);
return FileVisitResult.CONTINUE;
}
private void setOwnerAndGroupForFile(final UserPrincipal superuser,
final GroupPrincipal servicesGroup, Path file)
throws IOException {
Files.setOwner(file, superuser);
PosixFileAttributeView fileAttributeView = Files
.getFileAttributeView(file, PosixFileAttributeView.class);
fileAttributeView.setGroup(servicesGroup);
}
};
Files.walkFileTree(Paths.get(dataDirectoryFile.toURI()), visitor);