长文件名处理
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)); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!