File自帶的 file.canRead()
和 file.canWrite()
只能用於判斷文件,不能用於判斷目錄
判斷目錄的工具類:
public class RootDirectoryUtil {
public static String ROOT_DIRECTORY;
static {
ROOT_DIRECTORY = getRootDirectory();
}
/**
* 依次獲取有權限的系統臨時目錄、用戶工作目錄、應用目錄
* @return
* @author lijiewei
* @date 2020/6/22 23:51
*/
public static String getRootDirectory() {
File file;
String directory = System.getProperty("java.io.tmpdir");
if(StringUtils.isNotBlank(directory)) {
file = new File(directory);
if(RootDirectoryUtil.directoryCanRead(file) && RootDirectoryUtil.directoryCanWriteAndDelete(file)) {
return directory;
}
}
directory = System.getProperty("user.dir");
if(StringUtils.isNotBlank(directory)) {
file = new File(directory);
if(RootDirectoryUtil.directoryCanRead(file) && RootDirectoryUtil.directoryCanWriteAndDelete(file)) {
return directory;
}
}
try {
directory = ResourceUtils.getURL("classpath:").getPath();
} catch (FileNotFoundException e) {
return null;
}
if(StringUtils.isNotBlank(directory)) {
file = new File(directory);
if(RootDirectoryUtil.directoryCanRead(file) && RootDirectoryUtil.directoryCanWriteAndDelete(file)) {
return directory;
}
}
return null;
}
/**
* 判斷文件夾是否有讀權限
* @param file 文件夾
* @return
* @author lijiewei
* @date 2020/6/22 23:52
*/
private static Boolean directoryCanRead(File file) {
if(!file.isDirectory()) {
return false;
}
try {
File[] listFiles = file.listFiles();
// 返回null表示無法讀取或訪問,如果爲空目錄返回的是一個空數組
if (null != listFiles) {
return true;
}
} catch (Exception e) {
return false;
}
return false;
}
/**
* 判斷文件夾是否有寫且刪除權限
* @param file 文件夾
* @return
* @author lijiewei
* @date 2020/6/22 23:53
*/
private static Boolean directoryCanWriteAndDelete(File file) {
if(!file.isDirectory()) {
return false;
}
try {
File tmpFile = new File(file, "canWriteTest.temp");
if (tmpFile.exists()) {
return tmpFile.delete();
} else if (tmpFile.createNewFile()) {
return tmpFile.delete();
}
} catch (Exception e) {
return false;
}
return false;
}
}