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;
}
}