现在的位置: 首页 > 综合 > 正文

长文件名处理

2013年04月22日 ⁄ 综合 ⁄ 共 1388字 ⁄ 字号 评论关闭
Code:
/**
* 短文件名处理方式处理长文件名, 名字前ShortFileNameLong位 +~+ 时间戳 [+ .扩展名]; 中英文支持,字符长度(中文算2).
* @param s 字符串
* @param max 最大数
* @param ShortFileNameLong 保留多少位
* @return
* 例:中中中中中中中中中中中中中中中中~1185169295390.zip
* 123456789012345678901234567890123456~1185163038890.zip
*/
public static String makeShortName(String s, int max, int ShortFileNameLong) {
if(s == null || s.equals("")){return s;}
char[] cs = s.toCharArray();
int count = 0;
int last = cs.length;
for(int i=0; i<cs.length; i++) {
if(cs[ i ]>255)
count+=2;
else
count++;
if(count>max) {
last = i+1;
break;
}
}
if(count<=max) // string is short or just the size!
return s;
// string is too long:
int dot = s.indexOf('.');
String suffix = String.valueOf(System.currentTimeMillis());
for(int i=last-1; i>=0; i--) {
if(cs[ i ]>255)
count-=2;
else
count--;
if(count<=ShortFileNameLong) {
if (dot < 0) {
return s.substring(0, i) + "~" + suffix;
}else{
String name = s.substring(0, dot);
String ext = s.substring(dot);// include .
if (ext.length() > i) {
ext = ext.substring(0, i);
}
if (name.length() > i) {
name = name.substring(0, i) + "~" + suffix;
} else {
name = name + "~" + suffix;
}
return name + ext;
}
}
}
return "~";
}

public static void main(String[] args) {
System.out.println(makeShortName("",100,32));
System.out.println(makeShortName(null,100,32));
char[] cs = new char[200];
Arrays.fill(cs, 'a');
String longName = new String(cs);
System.out.println(makeShortName(longName,100,32));
Arrays.fill(cs, 'b');
System.out.println(makeShortName(longName + "." + new String(cs),100,32));
System.out.println(makeShortName(longName + ".txt",100,32));
}

抱歉!评论已关闭.