长文件名处理

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));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值