1.设置所有者
管理文件所有者
Files.getOwner()和Files.setOwner()方法
要使用UserPrincipal来管理文件的所有者
(1)更改文件的所有者
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.FileOwnerAttributeView;
import java.nio.file.attribute.UserPrincipal;
import java.nio.file.attribute.UserPrincipalLookupService;
public class Main {
public static void main(String[] args) {
Path path = Paths.get("/www/test1.txt");
FileOwnerAttributeView foav = Files.getFileAttributeView(path,
FileOwnerAttributeView.class);
try {
UserPrincipal owner = foav.getOwner();
System.out.format("Original owner of %s is %s%n", path,
owner.getName());
FileSystem fs = FileSystems.getDefault();
UserPrincipalLookupService upls = fs.getUserPrincipalLookupService();
UserPrincipal newOwner = upls.lookupPrincipalByName("abc");
foav.setOwner(newOwner);
UserPrincipal changedOwner = foav.getOwner();
System.out.format("New owner of %s is %s%n", path,
changedOwner.getName());
}catch (IOException e){
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;public classMain {public static voidmain(String[] args) {
Path path= Paths.get("e:/test1.txt");
AclFileAttributeView aclView=Files.getFileAttributeView(path,
AclFileAttributeView.class);if (aclView == null) {
System.out.format("ACL view is not supported.%n");return;
}try{
List aclEntries =aclView.getAcl();for(AclEntry entry : aclEntries) {
System.out.format("Principal: %s%n", entry.principal());
System.out.format("Type: %s%n", entry.type());
System.out.format("Permissions are:%n");
Set permissions =entry.permissions();for(AclEntryPermission p : permissions) {
System.out.format("%s %n", p);
}
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
输出结果为
Principal: BUILTIN\Administrators (Alias)
Type: ALLOW
Permissions are:
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: NT AUTHORITY\SYSTEM (Well-known group)
Type: ALLOW
Permissions are:
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: NT AUTHORITY\Authenticated Users (Well-known group)
Type: ALLOW
Permissions are:
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
Permissions are:
READ_ATTRIBUTES
SYNCHRONIZE
EXECUTE
READ_DATA
READ_ACL
READ_NAMED_ATTRS
View Code
(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;import java.nio.file.attribute.*;importjava.util.EnumSet;importjava.util.List;importjava.util.Set;import staticjava.nio.file.attribute.AclEntryPermission.READ_DATA;import staticjava.nio.file.attribute.AclEntryPermission.WRITE_DATA;public classMain {public static voidmain(String[] args) {
Path path= Paths.get("e:/test1.txt");
AclFileAttributeView aclView=Files.getFileAttributeView(path,
AclFileAttributeView.class);if (aclView == null) {
System.out.format("ACL view is not supported.%n");return;
}try{
UserPrincipal bRiceUser=FileSystems.getDefault()
.getUserPrincipalLookupService().lookupPrincipalByName("abc");
Set permissions =EnumSet.of(READ_DATA, WRITE_DATA);
AclEntry.Builder builder=AclEntry.newBuilder();
builder.setPrincipal(bRiceUser);
builder.setType(AclEntryType.ALLOW);
builder.setPermissions(permissions);
AclEntry newEntry=builder.build();
List aclEntries =aclView.getAcl();
aclEntries.add(newEntry);
aclView.setAcl(aclEntries);
}catch(IOException e){
e.printStackTrace();
}
}
}
输出结果比刚才多了
Principal: hkgi-PC\abc (User)
Type: ALLOW
Permissions are:
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;import java.nio.file.attribute.*;importjava.util.Set;public classMain {public static voidmain(String[] args) {
Path path= Paths.get("/www/test1.txt");
PosixFileAttributeView posixView=Files.getFileAttributeView(path,
PosixFileAttributeView.class);try{
PosixFileAttributes attribs=posixView.readAttributes();
Set permissions =attribs.permissions();//Convert the file permissions into the rwxrwxrwx string form
String rwxFormPermissions =PosixFilePermissions.toString(permissions);//Print the permissions
System.out.println(rwxFormPermissions);
}catch(IOException e){
e.printStackTrace();
}
}
}
输出结果
rw-r--r--
(2)读取和更新名为test的文件权限
importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;import java.nio.file.attribute.*;importjava.util.EnumSet;importjava.util.Set;import static java.nio.file.attribute.PosixFilePermission.*;public classMain {public static voidmain(String[] args) {
Path path= Paths.get("/www/test1.txt");
PosixFileAttributeView posixView=Files.getFileAttributeView(path,
PosixFileAttributeView.class);if (posixView == null) {
System.out.format("POSIX attribute view is not supported%n.");return;
}
System.out.println("old:");
readPermissions(posixView);
updatePermissions(posixView);
System.out.println("new:");
readPermissions(posixView);
}public static voidreadPermissions(PosixFileAttributeView posixView) {try{
PosixFileAttributes attribs;
attribs=posixView.readAttributes();
Set permissions =attribs.permissions();//Convert the set of posix file permissions into rwxrwxrwx form
String rwxFormPermissions =PosixFilePermissions.toString(permissions);
System.out.println(rwxFormPermissions);
}catch(IOException e){
e.printStackTrace();
}
}public static voidupdatePermissions(PosixFileAttributeView posixView) {try{
Set permissions =EnumSet.of(OWNER_READ, OWNER_WRITE,OWNER_EXECUTE,
GROUP_READ,GROUP_WRITE);
posixView.setPermissions(permissions);
System.out.println("Permissions set successfully.");
}catch(IOException e){
e.printStackTrace();
}
}
}
输出结果
old:
rw-r-----
Permissions set successfully.
new:
rwxrw----