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