如何使用java修改文件所有者及其權(quán)限
這篇文章主要介紹了如何使用java修改文件所有者及其權(quán)限,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
1.設(shè)置所有者
管理文件所有者
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(); } } }
輸出
查看文件詳細(xì)信息
2.ACL文件權(quán)限
Windows上支持ACL類型文件屬性
使用AclFileAttributeView的
getAcl()方法獲取文件的AclEntry列表
setAcl()方法設(shè)置文件的AclEntry列表
(1)讀取文件e:/test1.txt的ACL條目
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.AclEntry; import java.nio.file.attribute.AclEntryPermission; import java.nio.file.attribute.AclFileAttributeView; import java.util.List; import java.util.Set; public class Main { public static void main(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<AclEntry> 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<AclEntryPermission> permissions = entry.permissions(); for (AclEntryPermission p : permissions) { System.out.format("%s %n", p); } } } catch (IOException e) { e.printStackTrace(); } } }
輸出結(jié)果為
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
(2)為指定用戶添加新的ACL條目
e:/test1.txt為用戶abc添加DATA_READ和DATA_ WRITE權(quán)限
import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.*; import java.util.EnumSet; import java.util.List; import java.util.Set; import static java.nio.file.attribute.AclEntryPermission.READ_DATA; import static java.nio.file.attribute.AclEntryPermission.WRITE_DATA; public class Main { public static void main(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<AclEntryPermission> 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<AclEntry> aclEntries = aclView.getAcl(); aclEntries.add(newEntry); aclView.setAcl(aclEntries); }catch (IOException e){ e.printStackTrace(); } } }
輸出結(jié)果比剛才多了
Principal: hkgi-PC\abc (User) Type: ALLOW Permissions are: WRITE_DATA READ_DATA
3.POSIX文件權(quán)限
UNIX支持POSIX標(biāo)準(zhǔn)文件屬性
PosixFilePermission枚舉類型定義九個(gè)常量,每個(gè)權(quán)限組件一個(gè)。
九個(gè)常數(shù)命名為X_Y,其中X是OWNER,GROUP和OTHERS,Y是READ,WRITE和EXECUTE。
PosixFilePermissions的toString()方法將一組PosixFilePermission枚舉常量轉(zhuǎn)換為rwxrwxrwx形式的字符串
PosixFileAttributeView的setPermissions()方法用來設(shè)置權(quán)限
(1)輸出/www/test1.txt的權(quán)限
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.*; import java.util.Set; public class Main { public static void main(String[] args) { Path path = Paths.get("/www/test1.txt"); PosixFileAttributeView posixView = Files.getFileAttributeView(path, PosixFileAttributeView.class); try{ PosixFileAttributes attribs = posixView.readAttributes(); Set<PosixFilePermission> 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(); } } }
輸出結(jié)果
rw-r--r--
(2)讀取和更新名為test的文件權(quán)限
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.*; import java.util.EnumSet; import java.util.Set; import static java.nio.file.attribute.PosixFilePermission.*; public class Main { public static void main(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 void readPermissions(PosixFileAttributeView posixView) { try{ PosixFileAttributes attribs; attribs = posixView.readAttributes(); Set<PosixFilePermission> 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 void updatePermissions(PosixFileAttributeView posixView) { try { Set<PosixFilePermission> 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(); } } }
輸出結(jié)果
old: rw-r----- Permissions set successfully. new: rwxrw----
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot?集成Elasticsearch模塊實(shí)現(xiàn)簡(jiǎn)單查詢功能
本文講解了Spring?Boot集成Elasticsearch采用的是ES模板的方式實(shí)現(xiàn)基礎(chǔ)查詢,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-06-06詳解Spring3.x 升級(jí)至 Spring4.x的方法
本篇文章主要介紹了詳解Spring3.x 升級(jí)至 Spring4.x的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04Java?Stream函數(shù)式編程管道流結(jié)果處理
這篇文章主要為大家介紹了Java?Stream函數(shù)式編程管道流結(jié)果處理的示例過程解析需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03全面了解OAuth?2.0四種授權(quán)方式金三銀四無懼面試
這篇文章主要介紹了全面了解OAuth?2.0四種授權(quán)方式金三銀四無懼面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02idea自帶Jacoco/idea自動(dòng)測(cè)試語句覆蓋率方法(使用詳解)
這篇文章主要介紹了idea自帶Jacoco/idea自動(dòng)測(cè)試語句覆蓋率方法,本文給大家分享使用方法,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04RocketMQ的push消費(fèi)方式實(shí)現(xiàn)示例
這篇文章主要為大家介紹了RocketMQ的push消費(fèi)方式實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-08-08