如何使用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");
Setpermissions=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();
ListaclEntries=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{
Setpermissions=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。