java|java 如何为文件及文件夹添加权限
目录
- java 为文件及文件夹添加权限
- java 修改文件所有者及其权限
- 1.设置所有者
- 2.ACL文件权限
- 3.POSIX文件权限
java 为文件及文件夹添加权限
/** * 增加权限,使路径可上传文件 */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); }}/** * 增加权限,使路径及子路径都有权限 */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 修改文件所有者及其权限
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 ownerof%sis %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 ownerof%sis %s%n", path,changedOwner.getName()); }catch (IOException e){e.printStackTrace(); }}}
输出
文章图片
查看文件详细信息
文章图片
2.ACL文件权限
Windows上支持ACL类型文件属性
使用AclFileAttributeView的
- getAcl()方法获取文件的AclEntry列表
- setAcl()方法设置文件的AclEntry列表
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 viewis notsupported.%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)(2)为指定用户添加新的ACL条目
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
e:/test1.txt为用户abc添加DATA_READ和DATA_ WRITE权限
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 viewis notsupported.%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()方法用来设置权限
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 permissions = attribs.permissions(); // Convert the file permissions into the rwxrwxrwx string formString rwxFormPermissions = PosixFilePermissions.toString(permissions); // Print the permissionsSystem.out.println(rwxFormPermissions); }catch (IOException e){e.printStackTrace(); }}}
输出结果
rw-r--r--(2)读取和更新名为test的文件权限
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 viewis notsupported%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 permissions = attribs.permissions(); // Convert the set of posix file permissions into rwxrwxrwx formString rwxFormPermissions = PosixFilePermissions.toString(permissions); System.out.println(rwxFormPermissions); }catch (IOException e){e.printStackTrace(); }}public static void updatePermissions(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:【java|java 如何为文件及文件夹添加权限】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
rw-r-----
Permissions set successfully.
new:
rwxrw----
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 任时光绽放成六月繁花
- 我从来不做坏事
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 樱花雨
- 如何寻找情感问答App的分析切入点
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 事件代理