最近接手一个别人的项目,该项目要改造后作为依赖引入到另外一个项目中。
改造时发现,此项目的编码格式为GBK,而目标项目的编码格式为UTF-8。
直接引用,中文会乱码,因此要将编码格式改为UTF-8,源代码文件太多,如果手动改的话,工作量可想而知,
自然而然的想到,找个自动改编码的程序,从网上找了个小程序,非常简单,就一个Java类,执行main方法即可。
其中引用了Jodd项目(http://jodd.org/),具体代码如下:
package com; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jodd.io.FileNameUtil; import jodd.io.FileUtil; /** * 项目源文件格式转换(Java文件) */ public class ConvertEncodingUtil { private static final String UTF8 = "UTF-8"; private static final String GBK = "GBK"; public static void main(String[] args) { String srcDir = "F:\\src\\Demo"; String targetDir = "E:\\target\\Demo"; ConvertEncodingUtil con = new ConvertEncodingUtil(); try { con.convertEncoding2UTF8(srcDir, targetDir, GBK); } catch (IOException e) { e.printStackTrace(); } } /** * @param srcDir 源文件所在目录 * @param targetDir 目标文件目录 * @param srcEncoding 源文件编码 */ public void convertEncoding2UTF8(String srcDir, String targetDir, String srcEncoding) throws IOException { this.convertEncoding(srcDir, targetDir, srcEncoding, UTF8); } /** * @param srcEncoding 源文件编码 * @param targetEncoding 目标编码 */ public void convertEncoding(String srcDir, String targetDir, String srcEncoding, String targetEncoding) throws IOException { if(isNullOrEmpty(srcDir)) { System.out.println(srcDir + "is not exists..."); return; } File srcFile = new File(srcDir); if(!srcFile.exists()) { System.out.println(srcDir + "is not exists..."); return; } else if(srcFile.isFile()) { System.out.println(srcDir + "is not a directory!"); return; } if(isNullOrEmpty(targetDir)) { System.out.println(targetDir + "is not exists..."); return; } File dir = new File(targetDir); if(dir.isFile()) { System.out.println(targetDir + "is not a directory!"); return; } else if(!dir.exists()) { dir.mkdirs(); } // 获取所有java文件 List<File> list = getAllSubFiles(srcDir); for(File file : list) { // 转码后的文件路径 String absPath = targetDir + file.getAbsolutePath().substring(srcDir.length()); // 使用 srcEncoding 读取数据,然后用 targetEncoding 写入数据 String path = FileNameUtil.getFullPath(absPath); File pf = new File(path); if(!pf.exists()) { pf.mkdirs(); } FileUtil.writeString(absPath, FileUtil.readString(file, srcEncoding), targetEncoding); //FileUtils.writeLines(new File(absPath), "UTF-8", FileUtils.readLines(file, "GBK")); } } private List<File> getAllSubFiles(String dirName) { List<File> files = new ArrayList<File>(); File rootDir = new File(dirName); if (rootDir.isDirectory()) { File[] allFiles = rootDir.listFiles(); for (File file : allFiles) { if (file.isDirectory()) { files.addAll(getAllSubFiles(file.getAbsolutePath())); } else if (FileNameUtil.getExtension(file.getName()).equalsIgnoreCase("java")) { files.add(file); } } } return files; } private boolean isNullOrEmpty(String arg) { return arg == null || arg.trim().equals(""); } }