2017-05-31 33 views
0

我想寫一個函數來驗證天氣給定的路徑在Linux/Windows中有效的文件擴展名。正則表達式來驗證窗口和擴展的linux路徑

例如:

Windows路徑:d:\ DATA \ MY_PROJECT \ 01_07_03_061418738709443.doc
Linux的路徑:/source_data/files/08_05_09_1418738709443.pdf

,我已經嘗試的代碼是

static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?"; 

static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$"; 

public boolean checkPathValidity(String filePath) { 

    Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN); 
    Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN); 
    Matcher m1 = linux_pattern.matcher(filePath); 
    Matcher m2 = win_pattern.matcher(filePath); 

    if (m1.matches() || m2.matches()) { 
     return true; 
    } else { 
     return false; 
    } 
} 

如果path在windows/linux中有效,則此函數的結果爲true。 上述函數不會返回包含日期的某些路徑的正確結果,_? ,*在他們的道路上。

+0

這甚至值得嗎?您將在遠程端收到異常,無論文件是否具有無效字符,或者文件具有有效字符,但是指的是不存在或不可訪問的路徑。例如''/root/08_05_09.pdf''會通過正則表達式檢查,但可能會失敗,無論您的應用程序正在執行什麼操作。因此無論如何,都會檢查遠程端的有效性。 – VGR

+0

這些驗證將在客戶端本身執行。我只是根據遠程端配置checkPathValidity()方法。 –

回答

0
static String REMOTE_LOCATION_WIN_PATTERN = "([a-zA-Z]:)?(\\\\[a-z A-Z0-9_.-]+)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)\\\\?"; 

static String REMOTE_LOCATION_LINUX_PATTERN = "^(/[^/]*)+.(txt|gif|jpg|png|jpeg|pdf|doc|docx|xls|xlsx|DMS)/?$"; 

static Pattern linux_pattern = Pattern.compile(REMOTE_LOCATION_LINUX_PATTERN); 
static Pattern win_pattern = Pattern.compile(REMOTE_LOCATION_WIN_PATTERN); 

static final boolean WINDOWS = System.getProperty("os.name").startsWith("Windows"); 


public boolean checkPathValidity(String filePath) { 
    Matcher m = WINDOWS ? win_pattern.matcher(filePath) : linux_pattern.matcher(filePath); 

    return m.matches();  
} 
+0

我嘗試過路徑G:\ DATA \ GREEN_DOC \ MyCab \ index \ 16_12_06_05_09_1418738709443F.DOC。這不起作用 –

+0

REMOTE_LOCATION_WIN_PATTERN必須不正確。 – Mike

+0

我知道這是我的問題。我需要一個正則表達式來驗證windows和linux系統上的文件路徑 –