/** * 短文件名处理方式处理长文件名, 名字前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)); } |