Eclipse修改编码后乱码解决

Eclipse用了一段时间,都是用的gbk编码的,突然想要规范下,强迫症犯了,于是将在Window->Preference->Appearances->Workspace修改Text file encoding为UFT-8,一点击确认,Oh,My God!中文都乱码了,一开始想的是用记事本将文件一个一个的另存为UTF-8格式,累死了,发现工程量太大,放弃了,转战代码,下面是可实现的代码,支持批量处理(即处理一个文件夹内的所有代码),不支持文件夹下还有文件夹的情况!代码如下:

package com.tfj.demo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
 * @function 将批量的gbk的乱码文件转换到utf8
 *           将gbk的代码放到srcDir之下,转码置destDir之下,不支持srcDir之下有目录,srcDir目录与destDir目录不能一样
 * @author Jacksile E-mail:tufujietec@foxmail.com
 * @date 2016年1月16日 下午3:02:07
 */
public class UTF8Parser {

    static File srcDir = new File("E:\eclipse2\studyall\src\com\tfj\algorithm"); // 待转码的GBK格式文件夹
    static File destDir = new File("E:\eclipse\studyall\src\com\tfj\algorithm"); // 转码成UTF8的目标文件夹

    public static void main(String[] args) {
        // 1.判断是目录
        if (!srcDir.isDirectory()) {
            return;
        }
        // 2.遍历所有目录
        File[] fs = srcDir.listFiles();

        // 创建目标目录
        if (!destDir.exists()) {
            destDir.mkdirs();
        }

        try {
            new UTF8Parser().parse(fs);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 目录就迭代遍历;文件就重编码
     */
    private void parse(File[] fs) throws IOException {
        for (File file : fs) {
            if (!file.isDirectory()) {
                File destFile = new File(destDir, file.getName());
                parse2UTF_8(file, destFile);
            } else {
                parse(file.listFiles());
            }
        }
    }

    /** 
     */
    private void parse2UTF_8(File file, File destFile) throws IOException {
        StringBuffer msg = new StringBuffer();
        // 读写对象
        PrintWriter ps = new PrintWriter(new OutputStreamWriter(new FileOutputStream(destFile,
                false), "utf8"));
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),
                "gbk"));

        // 读写动作
        String line = br.readLine();
        while (line != null) {
            msg.append(line).append("
");
            line = br.readLine();
        }
        ps.write(msg.toString());
        br.close();
        ps.flush();
        ps.close();
    }

}

代码中修改文件夹名,运行,从转换到的文件夹复制所有文件到原来文件夹,代码中修改文件夹名。。。反反复复这三步,发现我的文件夹也太多了,这样也会累个半死,于是只能转战转换工具,网上搜索:gbk转utf-8软件,一大堆工具,很多都是支持批量处理,打开工具,选择一个文件夹(这下可以是任意的,没有限制,上面代码还限制文件夹中不能存在文件夹),轻轻松松转换,这下,编码问题彻底解决。唯一遗憾的是这样大批量处理会导致原先是utf-8的文件出现错误,所以建议批量处理时文件夹在最大化的情况下避免存在已经是utf-8的文件,否则适当缩小文件夹包含范围。

原文地址:https://www.cnblogs.com/tufujie/p/5137564.html