如何使用 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);