欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java将一个目录下所有GBK格式文件转化成UTF-8格式文件

程序员文章站 2022-03-02 10:29:36
...

由于本人实验室前辈的代码都是GBK编码格式,而自己之前敲代码的工作环境都是UTF-8,因此写下这个GBK格式转UTF-8格式的小工具类。

使用时只需要将main()函数中src值改成GBK文件目录,des值改成任意文件夹名即可。格式转变完成后,复制des文件夹中的新文件去覆盖GBK文件。

使用前最好备份一份代码,以备万一。

ConvertGBK2Utf8.java

import java.io.*;
import java.util.Arrays;

/**
 * @Author Nino 2020/9/1
 */
public class ConvertGBK2Utf8 {
    public static void main(String[] args) {
        String src = "D:\\Nino\\Dropbox\\Code\\OpticalNetwork\\ULL_NEW\\src";
        String des = "des";
        try {
            convertGBK2U8(src, des);
            System.out.println("200");
        } catch (IllegalArgumentException e) {
            System.out.println("要被转换的文件不存在!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Convert fails!");
        }
    }

    private static void convertGBK2U8(String src, String des) throws Exception {
        File srcFile = new File(src);
        File desFile = new File(des);

        if (!srcFile.exists()) {
            throw new IllegalArgumentException();
        }
        if (!desFile.exists()) {
            desFile.mkdirs();
        }
        File[] srcLists;
        if (srcFile.isDirectory()) {
            srcLists = srcFile.listFiles();
        }else{
            srcLists = new File[1];
            srcLists[0] = srcFile;
        }
        for (File file : srcLists) {
            if (file.isDirectory()) {
                convertGBK2U8(file.getPath(), des + "\\" + file.getName());
            } else {
                InputStreamReader is = new InputStreamReader(new FileInputStream(file), "GBK");
                OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(des + "\\" + file.getName()), "UTF-8");
                char[] chars = new char[1];
                int len = -1;
                while ((len = is.read(chars)) != -1) {
                    os.write(chars, 0, chars.length);
                }
//                os.flush();
                os.close();
                is.close();
            }
        }
    }
}

实验结果一切正常。
唯一不太理解的一点是转换格式后的文件尾部会出现多余的字符,如果有人知道原因,还希望在评论区指出,谢谢!