Posts Tagged ‘小工具’

批量文本编码转换程序源码

March 18th, 2008

公司的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} ");
                }
            }
        }
    }
}
  • Share/Bookmark