Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java更改unix文件的组_Java_Nio - Fatal编程技术网

使用java更改unix文件的组

使用java更改unix文件的组,java,nio,Java,Nio,如何使用JavaAPI更改一组文件? 我知道我可以使用Files.setOwner(Java7)来设置文件的所有者 如何在Unix操作系统上更改文件的组 解决方案: UserPrincipalLookupService lookupservice = FileSystems.getDefault() .getUserPrincipalLookupService(); final UserPrincipal superuser = lookupservice .lookupPrin

如何使用JavaAPI更改一组文件? 我知道我可以使用
Files.setOwner
(Java7)来设置文件的所有者

如何在Unix操作系统上更改文件的组

解决方案

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);
userprincipalookupservice lookupservice=FileSystems.getDefault()
.getUserPrincipalLookupService();
final UserPrincipal superuser=lookupservice
.lookupPrincipalByName(“超级用户”);
最终组主体服务组=lookupservice
.lookupPrincipalByGroupName(“服务”);
FileVisitor=新FileVisitor(){
@凌驾
公共文件VisitResult postVisitDirectory(路径目录,
IOException exc)抛出IOException{
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult preVisitDirectory(路径文件,
BasicFileAttributes(属性属性)引发IOException{
setOwnerAndGroupForFile(超级用户、服务组、文件);
File[]listFiles=File.toFile().listFiles();
对于(文件文件1:listFiles){
walkFileTree(file1.toPath(),this);
}
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult visitFile(路径文件,
BasicFileAttributes(属性属性)引发IOException{
setOwnerAndGroupForFile(超级用户、服务组、文件);
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult visitFileFailed(路径文件,
IOException exc)抛出IOException{
outputError(“访问文件时出现问题”+文件);
返回FileVisitResult.CONTINUE;
}
私有void setOwnerAndGroupForFile(最终用户Principal superuser,
最终组主体服务组,路径文件)
抛出IOException{
Files.setOwner(文件,超级用户);
PosixFileAttributeView fileAttributeView=文件
.getFileAttributeView(文件,PosixFileAttributeView.class);
fileAttributeView.setGroup(servicesGroup);
}
};
Files.walkFileTree(path.get(dataDirectoryFile.toURI()),visitor);

您应该能够与POSIX系统一起使用。

我将查看JCraft的JSch库(Java安全通道)。它对java执行SSH,允许您作为用户进行身份验证,然后向您的内容发出
chmod
chown
请求


您可以提供一组
PosixFilePermission
实例来模拟chmod命令:

  //using PosixFilePermission to set file permissions 777
    Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
    //add owners permission
    perms.add(PosixFilePermission.OWNER_READ);
    perms.add(PosixFilePermission.OWNER_WRITE);
    perms.add(PosixFilePermission.OWNER_EXECUTE);
    //add group permissions
    perms.add(PosixFilePermission.GROUP_READ);
    perms.add(PosixFilePermission.GROUP_WRITE);
    perms.add(PosixFilePermission.GROUP_EXECUTE);
    //add others permissions
    perms.add(PosixFilePermission.OTHERS_READ);
    perms.add(PosixFilePermission.OTHERS_WRITE);
    perms.add(PosixFilePermission.OTHERS_EXECUTE);

    Files.setPosixFilePermissions(Paths.get("path/to/file"), perms);
//使用PosixFilePermission设置文件权限777
Set perms=new HashSet();
//添加所有者权限
perms.add(PosixFilePermission.OWNER\u READ);
perms.add(PosixFilePermission.OWNER\u WRITE);
perms.add(PosixFilePermission.OWNER\u EXECUTE);
//添加组权限
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.GROUP\u EXECUTE);
//添加其他权限
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_WRITE);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
setPosixFilePermissions(path.get(“path/to/file”)、perms);

原因的可能重复:
File[]listFiles=File.toFile().listFiles();对于(文件file1:listFiles){Files.walkFileTree(file1.toPath(),this);}
??可能与Brilliant.重复。。!谢谢你的回复。@MandarKulkarni不客气。请考虑接受其中一个答案,如果它们覆盖了您的问题中的所有内容。技术上,我没有任何异常,调试消息确实表明代码遍历了每个目录/子目录和文件的更改组。但是,当我在unix框上执行“ls-l”时,我看不到这些文件的修改组/所有者?有什么想法吗?@MandarKulkarni我现在没有什么东西可以测试。在上下文中考虑<代码>主< /代码>和<代码>超级用户< /代码>之间的差异。它实际上应该更改组还是它以前所在的组?它应该更改组和所有者。默认情况下,所有文件都将root作为所有者和组。