批量转换Uncode编码的文件

JDK自带的工具native2ascii可以将uncode编码的文件转换为本地编码的文件,但是不能批量转换文件。现在介绍小工具可以批量转换所有的文件。

首先下载工具UncodeReverse.exe,下载地址:http://download.csdn.net/source/344466,如果想自己编译程序,可以继续向下看。

使用命令编译打包过程如下:

UncodeReverseD: src

将d:\src下所有子目录中的资源文件(*.properties文件),按照Unicode转换为本地编码,转换后的文件名后加“.reverse”。

UncodeReverseD: src " *.java "

将d:\src下的所有java文件的uncode编码转换为本地编码,并且文件名称后加“.reverse”。

UncodeReverseD: src " *_zh.properties "

将d:\src下所有子目录中的所有中文资源文件文件,按照Unicode转换为本地编码,转换后的文件名后加“.reverse”。
命令的输出如下:

d: src allMessages_zh_CN . properties- > allMessages_zh_CN . properties . reversesuccess .

程序代码如下:

/**/ /*
*UncodeReverse.java
*ZhaoHonghui
*/

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Pattern;

/***/ /**
*将利用native2ascii命令编码的资源文件反向.<br>
*native2ascii&lt;resource.properties&gt;resource_zh_CN.properties<br>
*java-jarUncodeReverse.jar<br>
*
*
@authorZhaoHonghui
*
@version1.0d
*
*/

public class UncodeReverse ... {

privatestaticfinalStringVERSION="v1.0f";

privatestaticbooleanSkipComment=false;

publicstaticvoidmain(Stringargs[])...{
Stringpath
=null;
/**//*
*默认匹配所有的资源文件.
*/

StringfileName
=null;
for(inti=0;i<args.length;i++)...{
if(args[i].startsWith("-S"))...{
SkipComment
=true;
}
else...{
if(path==null)...{
path
=args[i];
}
elseif(fileName==null)...{
fileName
=args[i];
}

}

}

if(path==null)...{
usage();
System.exit(
-1);
}

if(fileName==null)...{
fileName
="*.properties";
}

Filefile
=newFile(path);
if(!file.isDirectory())...{
System.out.println(
"["+file+"]notexistsornotdirectory.");
usage();
System.exit(
-1);
}

reverseProperties(file,
newUncodeFileFilter(fileName));
}


privatestaticFile[]reverseProperties(Filefile,FileFilterfilter)...{
File[]files
=file.listFiles(filter);
for(inti=0;i<files.length;i++)...{
if(files[i].isDirectory())...{
reverseProperties(files[i],filter);
}
else...{
Filesource
=files[i];
/**//*
*文件名后添加.reverse后缀.
*/

Filetarget
=newFile(files[i].getParent(),files[i].getName()
+".reverse");
//if(target.exists()){
//System.out.println("Targetfile["+target
//+"]exits,break.");
//}else{
if(decodeFile(source,target))...{
System.out.println(source
+"->"+target.getName()
+"success.");
}
else...{
System.out.println(source
+"error.");
target.delete();
}

//}
}

}

returnfiles;
}


privatestaticbooleandecodeFile(Filesource,Filetarget)...{
BufferedReaderread
=null;
BufferedWriterwriter
=null;
try...{
read
=newBufferedReader(newFileReader(source));
writer
=newBufferedWriter(newFileWriter(target));
writer.write(
"#ReversebyUncodeReverse"+VERSION
+".Copyright2007ZhaoHonghui([email protected])"
+"http://blog.csdn.net/z3h.");
writer.newLine();
writer.write(
"#SourceFileName:"+source.getAbsolutePath());
writer.newLine();
Strings
=read.readLine();
while(s!=null)...{
Stringt
=decodeString(s);
writer.write(t);
writer.newLine();
s
=read.readLine();
}

returntrue;
}
catch(IOExceptione)...{
System.out.println(e.getClass()
+":"+e.getMessage());
returnfalse;
}
finally...{
try...{
if(read!=null)...{
read.close();
}

if(writer!=null)...{
writer.close();
}

}
catch(IOExceptione)...{
e.printStackTrace();
}

}

}


privatestaticStringdecodeString(Stringstr)...{
if(SkipComment&&str.trim().startsWith("#"))...{
returnstr;
}

StringBufferbuf
=newStringBuffer(str.length());
booleanflag=false;
booleanuflag=false;
intcnt=0;
char[]uncode=newchar[4];
for(inti=0;i<str.length();i++)...{
charc=str.charAt(i);
if(c=='\')...{
flag
=true;
continue;
}

if(flag&&c=='u')...{
uflag
=true;
continue;
}
else...{
if(flag&&!uflag)...{
buf.append(
"\");
}

flag
=false;
}

if(uflag&&cnt<5)...{
uncode[cnt]
=c;
cnt
++;
if(uflag&&cnt==4)...{
try...{
buf.append((
char)Integer.parseInt(newString(uncode),
16));
}
catch(NumberFormatExceptionNfe)...{
buf.append(
"\u"+newString(uncode));
}

flag
=false;
uflag
=false;
cnt
=0;
}

}
else...{
buf.append(c);
}

}

<img alig
分享到:
评论

你可能感兴趣的:(java,C++,c,.net,C#)