公司的java项目一开始为了和php的编码保存统一而采用了GBK,但是现在发现越来越多不方便的地方,于是决定全部转向UTF-8。为了能够把已写的源代码全转化到utf-8下,我写了一下小程序,用groovy写的。由于groovy学得还不够好,所以写出程序太java了。程序会把指定目录下的所有的文件都按照指定编码的方式读入,再以指定编码的方式写回到别外的目录里。代码如下:
import java.nio.charset.Charset;
public class Main{
public static void main(String[] args) {
if(args.length != 4) {
println("Useage: convertEncoding fileName toDir fromEncoding"
+"toEncoding")
}
def file = new File(args[0])
def toFile = new File(args[1])
def fromEncoding = args[2]
def toEncoding = args[3]
convert(file, toFile, fromEncoding, toEncoding)
}
public static void convert(File fromFile, File toFile,
String fromEncoding, String toEncoding) {
if(!fromFile.exists())
return;
if(!fromFile.isDirectory()) {
BufferedReader reader = null;
BufferedWriter writer = null;
if(fromEncoding == null || !Charset.isSupported(fromEncoding)) {
reader = new BufferedReader(new InputStreamReader
(new FileInputStream(fromFile)))
} else {
reader = new BufferedReader(new InputStreamReader
(new FileInputStream(fromFile), fromEncoding))
}
if(toEncoding == null || !Charset.isSupported(toEncoding)) {
writer = new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(toFile)))
} else {
writer = new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(toFile), toEncoding))
}
String line = ""
while(line != null) {
line = reader.readLine()
if(line == null) break;
writer.write(line+"\r\n");
}
reader.close();
writer.flush();
writer.close();
} else {
File[] files = fromFile.listFiles();
for(File file : files) {
if(file.isDirectory()) {
if(file.name == ".svn") {
continue
}
File toSubDir = new File(toFile, file.getName())
if(!toSubDir.mkdir()) {
println("create subdir : ${toSubDir} fail")
} else {
println("create subdir : ${toSubDir}")
}
convert(file, toSubDir, fromEncoding, toEncoding);
} else {
if(
!file.name.endsWith(".java") &&
!file.name.endsWith(".xhtml") &&
!file.name.endsWith(".xml") &&
!file.name.endsWith(".txt")
) {
continue;
}
File toNewFile = new File(toFile, file.name)
convert(file, toNewFile, fromEncoding, toEncoding)
println("File : ${file.absolutePath} converted "
+ "to ${toNewFile.absolutePath} ");
}
}
}
}
}
public class Main{
public static void main(String[] args) {
if(args.length != 4) {
println("Useage: convertEncoding fileName toDir fromEncoding"
+"toEncoding")
}
def file = new File(args[0])
def toFile = new File(args[1])
def fromEncoding = args[2]
def toEncoding = args[3]
convert(file, toFile, fromEncoding, toEncoding)
}
public static void convert(File fromFile, File toFile,
String fromEncoding, String toEncoding) {
if(!fromFile.exists())
return;
if(!fromFile.isDirectory()) {
BufferedReader reader = null;
BufferedWriter writer = null;
if(fromEncoding == null || !Charset.isSupported(fromEncoding)) {
reader = new BufferedReader(new InputStreamReader
(new FileInputStream(fromFile)))
} else {
reader = new BufferedReader(new InputStreamReader
(new FileInputStream(fromFile), fromEncoding))
}
if(toEncoding == null || !Charset.isSupported(toEncoding)) {
writer = new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(toFile)))
} else {
writer = new BufferedWriter(new OutputStreamWriter
(new FileOutputStream(toFile), toEncoding))
}
String line = ""
while(line != null) {
line = reader.readLine()
if(line == null) break;
writer.write(line+"\r\n");
}
reader.close();
writer.flush();
writer.close();
} else {
File[] files = fromFile.listFiles();
for(File file : files) {
if(file.isDirectory()) {
if(file.name == ".svn") {
continue
}
File toSubDir = new File(toFile, file.getName())
if(!toSubDir.mkdir()) {
println("create subdir : ${toSubDir} fail")
} else {
println("create subdir : ${toSubDir}")
}
convert(file, toSubDir, fromEncoding, toEncoding);
} else {
if(
!file.name.endsWith(".java") &&
!file.name.endsWith(".xhtml") &&
!file.name.endsWith(".xml") &&
!file.name.endsWith(".txt")
) {
continue;
}
File toNewFile = new File(toFile, file.name)
convert(file, toNewFile, fromEncoding, toEncoding)
println("File : ${file.absolutePath} converted "
+ "to ${toNewFile.absolutePath} ");
}
}
}
}
}