`
wen.owen
  • 浏览: 20304 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用native2ascii批量转换文件的编码方式

    博客分类:
  • Java
阅读更多
在一个项目中,如果源码控制得不好,有的同事提交的源码是GBK编码,有的又是utf-8。问题就来了,在Eclipse中打开时很抓狂,无论是在哪种编码方式下,看到的源文件总有些有乱码。在这个问题背景下,试想能否做一个批量转换工具,将某个文件夹下的源文件统一转为某种编码方式呢?

通过查阅相关资料后,发现JDK自带了一个native2ascii转换工具,可以实现单个文件的转换,于是决定动手写一段批量转换的代码。废话少说,见源码:

package com.fayhong.src;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamGobbler extends Thread {

	InputStream is;
	String type;

	StreamGobbler(InputStream is, String type) {
		this.is = is;
		this.type = type;
	}

	public void run() {
		try {
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String line = null;
			while ((line = br.readLine()) != null)
				System.out.println(type + ">" + line);
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}
}


package com.fayhong.src;

import java.io.*;

/**
 * 用于文件夹下的java文件的编码自动转换,如gbk转utf-8
 * @author Wen Fuqiang
 * @company Fayhong Technology Co., Ltd.
 * @date 2010-1-26
 */
public class EncodingConverter {

	/**
	 * main方法入口
	 * 
	 * @param args
	 * args[0] 给定需要转换的文件夹 args[1] 指定需要转换的编码,如utf-8等
	 */
	public static void main(String[] args) {
		// if (args.length<2){
		// System.out.println("please input path of folder and encoding name");
		// System.exit(1);
		// }
		// else{
		// 		ec.convertEncode(args[0], args[1]);
		// }
		
		EncodingConverter ec = new EncodingConverter();
		
		//暂时用src_path替换args[0],encoding_name替换arg[1]
		String src_path = "E:\\eclipse\\workspace\\BEER\\src\\com\\";
		String encoding_name = "utf-8";
		ec.convertEncode(src_path, encoding_name);

	}

	public void convertEncode(String sourceFloder, String encoding_name) {
		File file = new File(sourceFloder);
		String[] files = file.list();

		for (String s : files) {
			if (s.indexOf('.') == -1) { // 表明这是个子目录,回归调用此函数
				convertEncode(file.getAbsolutePath() + "\\" + s, encoding_name);
			} else {
				if (s.endsWith("java")) { //只处理以Java结尾的文件
					doConvertEncode(file.getAbsolutePath()+ "\\" + s, file.getAbsolutePath()+ "\\" + s, encoding_name);
				}
			}
		}
	}
	
	/**
	 *  完成具体的编码转换工作
	 * @param inputFile 输入文件
	 * @param outputFile 输出文件
	 * @param encoding_name 需要转成的编码格式
	 */
	public void doConvertEncode(String inputFile, String outputFile, String encoding_name){
        Runtime rt = Runtime.getRuntime();
        String cmd[] = {"native2ascii.exe","-reverse","-encoding",encoding_name,inputFile,outputFile};
        System.out.println("Execing convert command for " + inputFile + " ...");
        
		try {
			Process proc = rt.exec(cmd);
		
        // any error message?
        StreamGobbler errorGobbler = new 
            StreamGobbler(proc.getErrorStream(), "ERROR");
        
        // any output?
        StreamGobbler outputGobbler = new 
            StreamGobbler(proc.getInputStream(), "OUTPUT");
            
        // kick them off
        errorGobbler.start();
        outputGobbler.start();
                                
        // any error???
        int exitVal = proc.waitFor();
        System.out.println("ExitValue: " + exitVal);  
        
		} catch (Throwable e) {
			e.printStackTrace();
		} 
	}
}
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    JAVA上百实例源码以及开源项目源代码

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    java开源包2

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包11

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包3

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包6

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包5

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包10

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包4

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包8

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包7

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包9

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包101

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    Java资源包01

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

Global site tag (gtag.js) - Google Analytics