美文网首页
Java实现批量文件GBK转UTF-8

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

作者: Briarbear | 来源:发表于2018-06-03 13:18 被阅读0次

    经常阅读书籍附赠代码时或者其他源码时,会遇到很多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实现批量文件GBK转UTF-8

          本文链接:https://www.haomeiwen.com/subject/mydjsftx.html