java 如何為文件及文件夾添加權(quán)限
java 為文件及文件夾添加權(quán)限
/**
* 增加權(quán)限,使路徑可上傳文件
*/
public static void addChmod777(String filePath) throws IOException {
if (!System.getProperty("os.name").startsWith("Win")) {
String cmdGrant = "chmod 777 " + filePath;
BaseLogMethod.logInfo(TAG, "File Augmentation after Moving:" + cmdGrant);
Runtime.getRuntime().exec(cmdGrant);
}
}
/**
* 增加權(quán)限,使路徑及子路徑都有權(quán)限
*/
public static void addRChmod777(String filePath) throws IOException {
if (!System.getProperty("os.name").startsWith("Win")) {
String cmdGrant = "chmod -R 777 " + filePath;
BaseLogMethod.logInfo(TAG, ".addRChmod777: File Augmentation after Moving:" + cmdGrant);
Runtime.getRuntime().exec(cmdGrant);
}
}
java 修改文件所有者及其權(quán)限
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----
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實(shí)現(xiàn)緩存組件配置動態(tài)切換的步驟詳解
現(xiàn)在有多個(gè)springboot項(xiàng)目,但是不同的項(xiàng)目中使用的緩存組件是不一樣的,有的項(xiàng)目使用redis,有的項(xiàng)目使用ctgcache,現(xiàn)在需要用同一套代碼通過配置開關(guān),在不同的項(xiàng)目中切換這兩種緩存,本文介紹了SpringBoot實(shí)現(xiàn)緩存組件配置動態(tài)切換的步驟,需要的朋友可以參考下2024-07-07
Java8中l(wèi)ambda表達(dá)式的應(yīng)用及一些泛型相關(guān)知識
這篇文章主要介紹了Java8中l(wèi)ambda表達(dá)式的應(yīng)用及一些泛型相關(guān)知識的相關(guān)資料2017-01-01
Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例,Java自旋鎖是一種線程同步機(jī)制,它允許線程在獲取鎖時(shí)不立即阻塞,而是通過循環(huán)不斷嘗試獲取鎖,直到成功獲取為止,自旋鎖適用于鎖競爭激烈但持有鎖的時(shí)間很短的情況,需要的朋友可以參考下2023-10-10
Java synchronized關(guān)鍵字使用方式及特性解析
這篇文章主要介紹了Java synchronized關(guān)鍵字使用方式及特性解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
java代碼塊之簡易qq登錄界面及按鈕顏色設(shè)置代碼
這篇文章主要介紹了java代碼塊之簡易qq登錄界面及按鈕顏色設(shè)置代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11

