Java判斷linux和windows的文件合法路徑

不多bb,應該是80%可用。除根路徑如C:\\或/,後綴不要加/

public enum OSType {
    LINUX,
    WINDOWS,
    OTHERS;
}

然後判斷路徑是否合法:

private static final Pattern linux_path_pattern=Pattern.compile("(/([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}/)*([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255})|/)");
private static final Pattern windows_path_pattern=Pattern.compile("(^[A-Z]:((\\\\|/)([a-zA-Z0-9\\-_]){1,255}){1,255}|([A-Z]:(\\\\|/)))");

    /**
     * check path is valid in windows and linux
     * @param path path to be validate
     * @param platform valid value: linux,windows
     * @return whether the path is valid
     * **/
    public static boolean checkPathValid(String path,String platform){
        if (platform.toLowerCase().equals(OSType.LINUX.name().toLowerCase())) return checkPatternMatch(linux_path_pattern,path);
        if (platform.toLowerCase().equals(OSType.WINDOWS.name().toLowerCase())) return checkPatternMatch(windows_path_pattern,path);
        return false;
    }
    private static boolean checkPatternMatch(Pattern pattern,String target){
        return pattern.matcher(target).matches();
    }

主要思路

linux_path_pattern=Pattern.compile("(/([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}/)*([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255})|/)");

其中:

[a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}

模式1:代表以數字或字母[a-zA-Z0-9]開頭,後面字母或下劃線和破折號[a-zA-Z0-9_\\-]可以出現0-255次。

([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}/)*

代表上面的模式1可以出現0到多次。後面使用相同的[a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}模式來禁止後面加/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章