JDK自带的工具native2ascii可以将uncode编码的文件转换为本地编码的文件,但是不能批量转换文件。现在介绍小工具可以批量转换所有的文件。
首先下载工具UncodeReverse.exe,下载地址:http://download.youkuaiyun.com/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<resource.properties>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(zhaohonghui@hotmail.com)"
+"http://blog.youkuaiyun.com/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);
}
}
本文介绍了一个实用的小工具UncodeReverse,它可以批量将Unicode编码的资源文件转换为本地编码,适用于*.properties等文件。该工具提供了命令行方式,能够递归处理指定目录下的所有子目录。
9466

被折叠的 条评论
为什么被折叠?



