使用正則表達式識別合理的文件擴展名
系統硬件升級,采用nas存儲設備代替原來的本地存儲,問題出現了。
??????用作文件存儲的NAS設備居然不支持中文文件名,對其他字符的支持也不好說。
原來的系統處理只把文件名進行了轉換,沒有考慮文件擴展名,例如,下面的文件名:
??????test.測試
轉換后變成了:
??? 374658237937_1.測試
在nas上根本就無法存儲,導致程序執行失敗
?
解決的辦法:
必須對擴展名也進行轉換,但又不能全部轉換。對于以英文作為擴展名的文件,不作擴展名轉換,例如xx.doc
因此,需要使用某種方法把不合適的擴展名找出來,我現在的規則是,對包括下面的字符以外字符的擴展名進行轉換,這個規則是我查看window3的所有擴展名后確定的:
??????a-z
??????A-Z
??????_
??????-
??????0-9
???使用下面的正則表達式:
??????"[^\\w\\-]
??????由于\w已經包含了a-z,A-Z,0-9以及下劃線,所以只要再加上減號就可以了。
??? 測試用的java代碼如下:
?? package com.test;
import java.util.regex.Pattern;
public class a {
?static public void main(String[] argc)
?{
????
?? System.out.println(Pattern.compile("[^\\w\\-]").matcher("a*b").find());
?}
?
}
如果返回true,說明包含規則外的字符,需要被轉換。