import java.net.*; import java.io.*;
public class MLDonkeyUtil { /** * mldonkey文件下载存放路径 */ private String incoming = "/usr/local/mldonkey/incoming";
public static void main(String[] args) throws Exception { MLDonkeyUtil util = new MLDonkeyUtil(); util.convert(); }
private void convert() { File dir = new File(incoming); File[] files = dir.listFiles() ; for(int i = 0 ; i < files.length ; i++) { String strDest = convert(files[i].getName()); if(!files[i].getName().equals(strDest)) { print(files[i].getName() + " >>> " + strDest); File fDest = new File(files[i].getParent() + File.separator + strDest); files[i].renameTo(fDest) ; } } } private String convert(String s) { int location = 0; String ret = ""; while(true) { if(location + 8 <= s.length() ) { String subStr = s.substring(location ,location + 8); if(check(subStr)) { ret += "%" + convert2Hex(subStr.substring(1, 4)) + "%" + convert2Hex(subStr.substring(5, 8)); location = location + 8 ; } else { ret += s.substring(location ,location + 2); location = location + 1; } } else { ret += s.substring(location ); break ; } location ++ ; } return URLDecoder.decode(ret) ; } /** * 检查匹配类型(_nnn_nnn) * @param s * @return */ private boolean check(String s) { if(s.length() != 8) { return false ; }
if(s.charAt(0) != '_' || s.charAt(4) != '_') { return false ; }
if( isNum(s.charAt(1)) && isNum(s.charAt(2)) && isNum(s.charAt(3)) && isNum(s.charAt(5)) && isNum(s.charAt(6)) && isNum(s.charAt(7))) { return true ; } return false ; } private boolean isNum(char c ) { if(c >= 48 && c <= 57) { return true ; } return false ; } private String convert2Hex(String s) { int i = Integer.parseInt(s); if(i < 0 || i > 255) { throw new IllegalArgumentException(); } return Integer.toHexString(i); }
private void print(String str) { System.out.println(str); } } |