HIBERNATE TOOLS 幫助

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);
    }

}
相關文章
相關標籤/搜索