プロジェクトのファイルエンコーディングの変更


最近、他の人のプロジェクトを引き継いで、このプロジェクトを改造して依存として別のプロジェクトに導入します.
改造の際,この項目の符号化フォーマットは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("");
	}
}