长文件名处理

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));
}
posted @   dkcndk  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示