如何使用java修改文件所有者及其权限
这篇文章主要介绍了如何使用java修改文件所有者及其权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1.设置所有者
管理文件所有者
Files.getOwner()和Files.setOwner()方法
要使用UserPrincipal来管理文件的所有者
(1)更改文件的所有者
importjava.io.IOException; importjava.nio.file.*; importjava.nio.file.attribute.FileOwnerAttributeView; importjava.nio.file.attribute.UserPrincipal; importjava.nio.file.attribute.UserPrincipalLookupService; publicclassMain{ publicstaticvoidmain(String[]args){ Pathpath=Paths.get("/www/test1.txt"); FileOwnerAttributeViewfoav=Files.getFileAttributeView(path, FileOwnerAttributeView.class); try{ UserPrincipalowner=foav.getOwner(); System.out.format("Originalownerof%sis%s%n",path, owner.getName()); FileSystemfs=FileSystems.getDefault(); UserPrincipalLookupServiceupls=fs.getUserPrincipalLookupService(); UserPrincipalnewOwner=upls.lookupPrincipalByName("abc"); foav.setOwner(newOwner); UserPrincipalchangedOwner=foav.getOwner(); System.out.format("Newownerof%sis%s%n",path, changedOwner.getName()); }catch(IOExceptione){ e.printStackTrace(); } } }
输出
查看文件详细信息
2.ACL文件权限
Windows上支持ACL类型文件属性
使用AclFileAttributeView的
getAcl()方法获取文件的AclEntry列表
setAcl()方法设置文件的AclEntry列表
(1)读取文件e:/test1.txt的ACL条目
importjava.io.IOException; importjava.nio.file.Files; importjava.nio.file.Path; importjava.nio.file.Paths; importjava.nio.file.attribute.AclEntry; importjava.nio.file.attribute.AclEntryPermission; importjava.nio.file.attribute.AclFileAttributeView; importjava.util.List; importjava.util.Set; publicclassMain{ publicstaticvoidmain(String[]args){ Pathpath=Paths.get("e:/test1.txt"); AclFileAttributeViewaclView=Files.getFileAttributeView(path, AclFileAttributeView.class); if(aclView==null){ System.out.format("ACLviewisnotsupported.%n"); return; } try{ ListaclEntries=aclView.getAcl(); for(AclEntryentry:aclEntries){ System.out.format("Principal:%s%n",entry.principal()); System.out.format("Type:%s%n",entry.type()); System.out.format("Permissionsare:%n"); Set permissions=entry.permissions(); for(AclEntryPermissionp:permissions){ System.out.format("%s%n",p); } } }catch(IOExceptione){ e.printStackTrace(); } } }
输出结果为
Principal:BUILTIN\Administrators(Alias) Type:ALLOW Permissionsare: WRITE_DATA WRITE_OWNER APPEND_DATA SYNCHRONIZE WRITE_ATTRIBUTES EXECUTE READ_DATA DELETE_CHILD READ_ATTRIBUTES WRITE_NAMED_ATTRS WRITE_ACL DELETE READ_ACL READ_NAMED_ATTRS Principal:NTAUTHORITY\SYSTEM(Well-knowngroup) Type:ALLOW Permissionsare: WRITE_DATA WRITE_OWNER APPEND_DATA SYNCHRONIZE WRITE_ATTRIBUTES EXECUTE READ_DATA DELETE_CHILD READ_ATTRIBUTES WRITE_NAMED_ATTRS WRITE_ACL DELETE READ_ACL READ_NAMED_ATTRS Principal:NTAUTHORITY\AuthenticatedUsers(Well-knowngroup) Type:ALLOW Permissionsare: WRITE_DATA READ_ATTRIBUTES APPEND_DATA WRITE_NAMED_ATTRS SYNCHRONIZE WRITE_ATTRIBUTES EXECUTE DELETE READ_DATA READ_ACL READ_NAMED_ATTRS Principal:BUILTIN\Users(Alias) Type:ALLOW Permissionsare: READ_ATTRIBUTES SYNCHRONIZE EXECUTE READ_DATA READ_ACL READ_NAMED_ATTRS
(2)为指定用户添加新的ACL条目
e:/test1.txt为用户abc添加DATA_READ和DATA_WRITE权限
importjava.io.IOException; importjava.nio.file.FileSystems; importjava.nio.file.Files; importjava.nio.file.Path; importjava.nio.file.Paths; importjava.nio.file.attribute.*; importjava.util.EnumSet; importjava.util.List; importjava.util.Set; importstaticjava.nio.file.attribute.AclEntryPermission.READ_DATA; importstaticjava.nio.file.attribute.AclEntryPermission.WRITE_DATA; publicclassMain{ publicstaticvoidmain(String[]args){ Pathpath=Paths.get("e:/test1.txt"); AclFileAttributeViewaclView=Files.getFileAttributeView(path, AclFileAttributeView.class); if(aclView==null){ System.out.format("ACLviewisnotsupported.%n"); return; } try{ UserPrincipalbRiceUser=FileSystems.getDefault() .getUserPrincipalLookupService().lookupPrincipalByName("abc"); Setpermissions=EnumSet.of(READ_DATA,WRITE_DATA); AclEntry.Builderbuilder=AclEntry.newBuilder(); builder.setPrincipal(bRiceUser); builder.setType(AclEntryType.ALLOW); builder.setPermissions(permissions); AclEntrynewEntry=builder.build(); List aclEntries=aclView.getAcl(); aclEntries.add(newEntry); aclView.setAcl(aclEntries); }catch(IOExceptione){ e.printStackTrace(); } } }
输出结果比刚才多了
Principal:hkgi-PC\abc(User) Type:ALLOW Permissionsare: WRITE_DATA READ_DATA
3.POSIX文件权限
UNIX支持POSIX标准文件属性
PosixFilePermission枚举类型定义九个常量,每个权限组件一个。
九个常数命名为X_Y,其中X是OWNER,GROUP和OTHERS,Y是READ,WRITE和EXECUTE。
PosixFilePermissions的toString()方法将一组PosixFilePermission枚举常量转换为rwxrwxrwx形式的字符串
PosixFileAttributeView的setPermissions()方法用来设置权限
(1)输出/www/test1.txt的权限
importjava.io.IOException; importjava.nio.file.Files; importjava.nio.file.Path; importjava.nio.file.Paths; importjava.nio.file.attribute.*; importjava.util.Set; publicclassMain{ publicstaticvoidmain(String[]args){ Pathpath=Paths.get("/www/test1.txt"); PosixFileAttributeViewposixView=Files.getFileAttributeView(path, PosixFileAttributeView.class); try{ PosixFileAttributesattribs=posixView.readAttributes(); Setpermissions=attribs.permissions(); //Convertthefilepermissionsintotherwxrwxrwxstringform StringrwxFormPermissions=PosixFilePermissions.toString(permissions); //Printthepermissions System.out.println(rwxFormPermissions); }catch(IOExceptione){ e.printStackTrace(); } } }
输出结果
rw-r--r--
(2)读取和更新名为test的文件权限
importjava.io.IOException; importjava.nio.file.Files; importjava.nio.file.Path; importjava.nio.file.Paths; importjava.nio.file.attribute.*; importjava.util.EnumSet; importjava.util.Set; importstaticjava.nio.file.attribute.PosixFilePermission.*; publicclassMain{ publicstaticvoidmain(String[]args){ Pathpath=Paths.get("/www/test1.txt"); PosixFileAttributeViewposixView=Files.getFileAttributeView(path, PosixFileAttributeView.class); if(posixView==null){ System.out.format("POSIXattributeviewisnotsupported%n."); return; } System.out.println("old:"); readPermissions(posixView); updatePermissions(posixView); System.out.println("new:"); readPermissions(posixView); } publicstaticvoidreadPermissions(PosixFileAttributeViewposixView){ try{ PosixFileAttributesattribs; attribs=posixView.readAttributes(); Setpermissions=attribs.permissions(); //Convertthesetofposixfilepermissionsintorwxrwxrwxform StringrwxFormPermissions=PosixFilePermissions.toString(permissions); System.out.println(rwxFormPermissions); }catch(IOExceptione){ e.printStackTrace(); } } publicstaticvoidupdatePermissions(PosixFileAttributeViewposixView){ try{ Set permissions=EnumSet.of(OWNER_READ,OWNER_WRITE,OWNER_EXECUTE, GROUP_READ,GROUP_WRITE); posixView.setPermissions(permissions); System.out.println("Permissionssetsuccessfully."); }catch(IOExceptione){ e.printStackTrace(); } } }
输出结果
old: rw-r----- Permissionssetsuccessfully. new: rwxrw----
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。