系統(tǒng)硬件升級(jí),采用nas存儲(chǔ)設(shè)備代替原來(lái)的本地存儲(chǔ),問(wèn)題出現(xiàn)了。
??????用作文件存儲(chǔ)的NAS設(shè)備居然不支持中文文件名,對(duì)其他字符的支持也不好說(shuō)。
原來(lái)的系統(tǒng)處理只把文件名進(jìn)行了轉(zhuǎn)換,沒(méi)有考慮文件擴(kuò)展名,例如,下面的文件名:
??????test.測(cè)試
轉(zhuǎn)換后變成了:
??? 374658237937_1.測(cè)試
在nas上根本就無(wú)法存儲(chǔ),導(dǎo)致程序執(zhí)行失敗
?
解決的辦法:
必須對(duì)擴(kuò)展名也進(jìn)行轉(zhuǎn)換,但又不能全部轉(zhuǎn)換。對(duì)于以英文作為擴(kuò)展名的文件,不作擴(kuò)展名轉(zhuǎn)換,例如xx.doc
因此,需要使用某種方法把不合適的擴(kuò)展名找出來(lái),我現(xiàn)在的規(guī)則是,對(duì)包括下面的字符以外字符的擴(kuò)展名進(jìn)行轉(zhuǎn)換,這個(gè)規(guī)則是我查看window3的所有擴(kuò)展名后確定的:
??????a-z
??????A-Z
??????_
??????-
??????0-9
???使用下面的正則表達(dá)式:
??????"[^\\w\\-]
??????由于\w已經(jīng)包含了a-z,A-Z,0-9以及下劃線,所以只要再加上減號(hào)就可以了。
??? 測(cè)試用的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,說(shuō)明包含規(guī)則外的字符,需要被轉(zhuǎn)換。