package a.b.c import java.io.File; import java.io.IOException; import java.text.MessageFormat; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Random; import org.apache.commons.io.FileUtils; /** * HIBERNATE 幫助類 */ public class HibernateToolsUtil { public static String SL = "\tprivate static final long serialVersionUID = {0}L;"; /** * 文件轉碼, 不遍歷子目錄 * @param files * @param from 原始編碼 * @param to 轉換編碼 * @param path 轉碼後文件存放位置 */ public static void fileChangeEncoding(Collection<File> files, String from, String to, String path) throws IOException { if (files == null) { return; } File template = FileUtils.getTempDirectory(); template = new File(template, "/changeEncoding"); System.out.println("[系統緩存目錄]:" + template); System.out.println("執行轉碼------------------"); for (Iterator<File> iterator = files.iterator(); iterator.hasNext();) { File fromFile = (File)iterator.next(); System.out.println("當前文件:" + fromFile); File toFile = new File(template, fromFile.getName()); FileUtils.writeLines(toFile, to, FileUtils.readLines(fromFile, from), null); } FileUtils.copyDirectory(template, new File(path)); System.out.println("轉碼結束------------------"); } /** * HIBERNATE TOOLS 不支持 LIST 須要修改源碼 , 可是在最新的4.× 版本中修改失敗, 仍是直接經過一個轉換工具所有替換掉 * @param files * @param encoding 文件編碼 * @param toPath 轉換後文件放置路徑 */ public static void changeToList(Collection<File> files, String encoding, String toPath) throws IOException { if (files == null) { return; } Random r = new Random(Long.MAX_VALUE); File template = FileUtils.getTempDirectory(); template = new File(template, "/changeToList"); System.out.println("[系統緩存目錄]:" + template); System.out.println("執行替換SET------------------"); for (Iterator<File> iterator = files.iterator(); iterator.hasNext();) { File fromFile = (File)iterator.next(); System.out.println("當前文件:" + fromFile); File toFile = new File(template, fromFile.getName()); List<String> lines = FileUtils.readLines(fromFile); // i 下標,j 記錄序列號行,c 記錄定義class下標 行 int i = 0, j = 0; // 標識是不是人員擴展 for (String line : lines) { /* * 不處理內部類狀況 */ if (line.contains(" class ")) { j = i + 1; } if (i == j && i != 0) { if (line.contains("{")) { j = i + 1; } } line = replaceSet(line); lines.set(i, line); i++; } /****************************************************************/ // 填充序列號, 一些自定義處理 lines.add(j, MessageFormat.format(SL, String.valueOf(r.nextLong()))); /****************************************************************/ FileUtils.writeLines(toFile, encoding, lines, null); } FileUtils.copyDirectory(template, new File(toPath)); System.out.println("替換SET結束------------------"); } public static String replaceSet(String line) { line = line.replaceAll("\\.Set;$", ".List;"); line = line.replaceAll("\\bSet<", "List<"); line = line.replaceAll("\\.HashSet;$", ".ArrayList;"); line = line.replaceAll("\\bHashSet<", "ArrayList<"); return line; } /** * @param args */ public static void main(String[] args) throws IOException { // 源文件地址 String filePath = "1"; // 轉換文件存放地址 String toPath = "2"; fileChangeEncoding(FileUtils.listFiles(new File(filePath), new String[]{"java"}, true), "GBK", "UTF-8", toPath); changeToList(FileUtils.listFiles(new File(toPath), new String[]{"java"}, true), "UTF-8", toPath); } }