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

在一个项目中,如果源码控制得不好,有的同事提交的源码是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();
		} 
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在IDEA中,可以通过设置文件编码方式来确保项目中的文件以正确的编码方式进行读取和保存。以下是设置文件编码方式的步骤: 1. 打开IntelliJ IDEA,并打开你的项目。 2. 在菜单栏中选择 "File"(文件) -> "Settings"(设置)。 3. 在弹出的窗口中,选择 "Editor"(编辑器) -> "File Encodings"(文件)。 4. 在 "Global Encoding"(全局编)下拉菜单中,选择你想要使用的默认编码方式。通常情况下,UTF-8 是一个常用的选择,因为它支持多种语言和字符集。 5. 在 "Project Encoding"(项目编)下拉菜单中,选择你想要使用的项目级别的编码方式。如果你希望每个项目都有不同的编码方式,可以选择 "Use project encoding for files"(使用项目编码方式)选项,并在下面的输入框中指定项目级别的编码方式。 6. 在 "Default encoding for properties files"(属性文件的默认编)下拉菜单中,选择你想要使用的属性文件的默认编码方式。 7. 确保 "Transparent native-to-ascii conversion"(透明的本地到ASCII转换)选项已勾选。这将确保在保存文件时,非ASCII字符会被转换为相应的转义序列,以避免出现编问题。 8. 点击 "OK"(确定)按钮保存设置。 这样,你就成功设置了IDEA的文件编码方式。记得在创建或导入项目时,也要确保选择正确的编码方式,以免出现乱等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值