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<String> types = new HashSet<String>();
        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<String> 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 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换...
    x360阅读 2,498评论 1 20
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,132评论 25 708
  • 一个戴黑眼镜的乞丐在路旁,手举着一顶帽子,上面贴着一张纸条: “请救助盲人。” 一位过路的妇女同情地看了他一...
    梓毓爸阅读 204评论 2 3
  • 【尽力而为】20170929-D137 国学:再次复习《渔翁对韵》一东,《日有所诵》中间选了几篇。 《牛津树》:复...
    小君爱未未阅读 257评论 0 0