在JDK1.7當中新增了對文件操作的一些API接口,此Demo特點:
- 讀取文件的屬性
- 讀取文件的權限,RWX格式,Number格式
- 修改文件的權限
- 權限格式的轉換:RWX格式與Number格式
二次修改說明:
- 參數命名 首字母小寫
- 添加異常捕獲,需要引用第三方apache BizCoreException jar包
package com.idcos.cloud.core.common.util;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.attribute.GroupPrincipal;
import java.nio.file.attribute.PosixFileAttributeView;
import java.nio.file.attribute.PosixFileAttributes;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.nio.file.attribute.UserPrincipal;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.util.Set;
import com.idcos.common.biz.BizCoreException;
public class FileAttributesUtil {
/**
* 獲取文件系統信息
* @param file
* @return
*/
public static FileSystem getFileSystem(File file) {
return file.toPath().getFileSystem();
}
public static UserPrincipalLookupService getUserPrincipalLookupService(File file) {
return getFileSystem(file).getUserPrincipalLookupService();
}
public static GroupPrincipal getGroupPrincipal(File file, String groupName) {
try {
return getUserPrincipalLookupService(file).lookupPrincipalByGroupName(groupName);
} catch (IOException e) {
throw new BizCoreException("獲取group名稱:" + groupName + "異常", e);
}
}
public static UserPrincipal getUserPrincipal(File file, String userName) {
try {
return getUserPrincipalLookupService(file).lookupPrincipalByName(userName);
} catch (IOException e) {
throw new BizCoreException("獲取user名稱:" + userName + "異常", e);
}
}
public static PosixFileAttributeView getPosixFileAttributeView(File file) {
return Files.getFileAttributeView(file.toPath(), PosixFileAttributeView.class);
}
public static PosixFileAttributes getPosixFileAttributes(File file) {
try {
return getPosixFileAttributeView(file).readAttributes();
} catch (IOException e) {
throw new BizCoreException("獲取文件屬性異常", e);
}
}
/**
* 修改文件用戶組
* @param file 文件
* @param groupName 用戶組名稱
* @throws IOException
*/
public static void setFileGroup(File file, String groupName) {
try {
getPosixFileAttributeView(file).setGroup(getGroupPrincipal(file, groupName));
} catch (IOException e) {
throw new BizCoreException("寫入文件group信息異常", e);
}
}
/**
* 修改文件用戶
* @param file 文件
* @param userName 用戶名稱
* @throws IOException
*/
public static void setFileUser(File file, String userName) {
try {
getPosixFileAttributeView(file).setOwner(getUserPrincipal(file, userName));
} catch (IOException e) {
throw new BizCoreException("寫入文件user信息異常", e);
}
}
/**
* 修改文件權限
* @param file 文件
* @param posixFilePermissionNumber 數字類型的權限,如:777
* @throws IOException
*/
public static void setFilePermissions(File file, String posixFilePermissionNumber) {
try {
getPosixFileAttributeView(file)
.setPermissions(
parsePosixFilePermissiontoSet(parsePosixFilePermissiontoRWX(posixFilePermissionNumber)));
} catch (IOException e) {
throw new BizCoreException("寫入文件權限信息異常", e);
}
}
/**
* 修改文件權限
* @param file 文件
* @param perms 文件權限數組
* @throws IOException
*/
public static void setFilePermissions(File file, Set<PosixFilePermission> perms) {
try {
getPosixFileAttributeView(file).setPermissions(perms);
} catch (IOException e) {
throw new BizCoreException("寫入文件權限信息異常", e);
}
}
/**
* 將RWX類型的文件權限修改爲Set
* @param posixFilePermission
* @return
*/
public static Set<PosixFilePermission> parsePosixFilePermissiontoSet(String posixFilePermission) {
return PosixFilePermissions.fromString(posixFilePermission);
}
/**
* 將String rwx類型的權限轉換爲String 數字類型
* 如:rw-r----- 轉換爲 640
* @param PosixFilePermission
* @return
*/
public static String parsePosixFilePermissiontoNum(Set<PosixFilePermission> set) {
int user = 0;
int group = 0;
int other = 0;
for (PosixFilePermission permission : set) {
switch (permission) {
case OWNER_READ:
user = user | 4;
break;
case OWNER_WRITE:
user = user | 2;
break;
case OWNER_EXECUTE:
user = user | 1;
break;
case GROUP_READ:
group = group | 4;
break;
case GROUP_WRITE:
group = group | 2;
break;
case GROUP_EXECUTE:
group = group | 1;
break;
case OTHERS_READ:
other = other | 4;
break;
case OTHERS_WRITE:
other = other | 2;
break;
case OTHERS_EXECUTE:
other = other | 1;
break;
}
}
return "" + user + group + other;
}
/**
*
* 將String 數字類型的權限轉換爲String rwx類型
* 如:640 轉換爲 rw-r-----
* @param posixFilePermission
* @return
*/
public static String parsePosixFilePermissiontoRWX(String posixFilePermission) {
String returnString = "";
char[] perStringArr = posixFilePermission.toCharArray();
for (char x : perStringArr) {
if ((x & 4) == 4) {
returnString += "r";
} else {
returnString += "-";
}
if ((x & 2) == 2) {
returnString += "w";
} else {
returnString += "-";
}
if ((x & 1) == 1) {
returnString += "x";
} else {
returnString += "-";
}
}
return returnString;
}
}