系统硬件升级,采用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,说明包含规则外的字符,需要被转换。