Java实现批量文件GBK转UTF-8


经常阅读书籍附赠代码时或者其他源码时,会遇到很多GBK编码的文本文件,比如java文件,其中的中文在其他编辑器下阅读的效果不好,
如vscode,sublime(也可用插件解决),要是直接能批量将GBK编码的文件转UTF-8该多好,于是,去网上找了相关的软件,结果很遗憾,
就是自己动手造轮子吧,才有这个小工具

  • 更多相关文章见笔者博客

示例源码

package xin.val1ant;

import org.apache.commons.io.FileUtils;


import java.io.*;

import java.util.HashSet;
import java.util.Set;

/**
 * 批量实现文件GBK to UTF-8
 */
public class Main {



    public static void main(String[] args) {
        String path = args[0];
        String[] strings = path.split(",");
        Set types = new HashSet();
        for (String s : strings) {
            types.add(s);
        }
        File directory = new File(".");
//        System.out.println(directory.getAbsolutePath());
        handle(directory.getAbsolutePath(),types);

    }


    public static void handle(String path,Set types){

        File[] files = new File(path).listFiles(); //获取该目录下所有文件或者目录
        if (files != null){
            for (File file : files) {
                if (file.isDirectory()){
                    //如果是路径,则递归调用
                    handle(file.getAbsolutePath(),types);
                }else {
                    String fileName = file.getName();
                    try {
                        String charset = getCharset(file.getAbsoluteFile());
//                        String charset = FileUtils
                        if (charset.equals("GBK") && types.contains(fileName.substring(fileName.lastIndexOf(".")+1))){
                            //输出过程
                            System.out.println(fileName+": charset encode converting........");
                            //如果编码为GBK 且在指定文件类型范围内
                            FileUtils.writeLines(new File(file.getAbsolutePath()),"UTF-8",FileUtils.readLines(file,"GBK"));
                        }

                    } catch (IOException e) {
                        System.out.println("获取文件编码异常");
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    private static String getCharset(File file) throws IOException {

        BufferedInputStream bin = new BufferedInputStream( new FileInputStream(file));
        int p = (bin.read() << 8) + bin.read();
        String code = null;
        //其中的 0xefbb、0xfffe、0xfeff、0x5c75这些都是这个文件的前面两个字节的16进制数
        switch (p) {
            case 0xefbb:
                code = "UTF-8";
                break;
            case 0xfffe:
                code = "Unicode";
                break;
            case 0xfeff:
                code = "UTF-16BE";
                break;
            case 0x5c75:
                code = "ANSI|ASCII" ;
                break ;
            default:
                code = "GBK";
        }

        return code;

    }

}





使用说明

  • 本开源工程很简单,里面的源码可供Java程序员学习交流,由于是原始版本,也未作其他测试,可能会存在转码失败,请联系本作者修复

  • 针对非程序员用户,可直接将根目录下的convert.jar文件复制到你需要转码的文件夹下面

  • 然后在正确配置Java环境变量的情况下,(未转为exe可执行文件,望见谅),具体配置java环境变量可自信百度,谷歌

  • 执行命令格式java -jar convert.jar 参数1,参数2,其中参数为你需要转码的文本格式文件,参数已逗号(英文逗号)分隔

  • 示例

    java -jar convert.jar txt,java,md 
    # 则会将该目录下所有的txt、java、md文件的GBK编码转成UTF-8编码
    

开源见码云、Github;如有其它问题,请联系作者

你可能感兴趣的:(Java实现批量文件GBK转UTF-8)