java返回有读写权限的目录

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章