package com.ftssyang;

/**  
 * @Title: CreateToString.java
 * @Package 
 * @Description: 根据包路径自动创建bean ToString()方法 
 * @author yanggq
 * @CreateDate 2016年1月26日 下午2:21:49
 * @ModifiedPerson  
 * @UpdateDate 2016年1月26日 下午2:21:49
 * @version V1.0  
 */

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: CreateToString
 * @Description: 创建toString 方法
 * @author yanggq
 * @date 2016年1月26日 下午2:21:49
 *
 */
public class CreateToString {
    /**
     * 定义所有要修改的javabean集合
     */
    private static List<String> filelist = new ArrayList<String>();

    /**
     * 添加绝对路径所需部分路劲
     */
    private static final String PATH_APPEND = "\\src\\main\\java\\";

    /**
     * 扫描包
     */
    private static String PACKAGE_PATH = "com.hyh";

    /**
     * 匹配类型
     */
    private static final String FILE_TYPE = ".java";

    /**
     * 父类类型
     */
    private static final String SUPER_CLASS = "GenericEntity";

    /**
     * 是否含有toString 方法标志
     */
    private static final String EXCEPT = "serialVersionUID";

    /**
     * 是否含有toString 方法标志
     */
    private static final String FLAG = "public String toString() {";

    /**
     * 
     * @Title: readLine
     * @Description: 按行读取文件
     * @param @return
     * @param @throws IOException 方法参数
     * @return String 返回类型
     * @throws 异常信息
     */
    private static StringBuilder readFile(String pathAndName) throws IOException {
        boolean contentFlag = false;
        StringBuilder sb = new StringBuilder("");
        ArrayListRemove<String> list=new ArrayListRemove<String>();
        FileReader reader = new FileReader(pathAndName);
        BufferedReader br = new BufferedReader(reader);
        String str = null;
        int mark=0;
        int startMark=0;
        int endMark=0;
        int end=0;
        while ((str = br.readLine()) != null) {
            if (str.trim().equals(FLAG)) {
                contentFlag = true;
                if(list.get(mark-1).contains("@Override")){
                    startMark=mark-1;
                }else{
                    startMark=mark;
                }
                
            }
                sb.append(str + "\n");
                list.add(str + "\n");
                mark++;
        }
        for(int i=startMark;i<list.size();i++){
            if (list.get(i).contains("return")) {
                endMark=i;
            }
            if(endMark>0&&list.get(i).contains("}")){
                endMark=i;
                break;
            }
//            if(endMark>0&&!list.get(i).trim().equals("")){
//                endMark=i;
//            }
        }
        
        br.close();
        reader.close();
        StringBuilder returnSb = null;
        if (!contentFlag) {
            returnSb = new StringBuilder(sb.reverse().toString().trim().replaceFirst("}", "").trim()).reverse();

        } else {
            list.removeRange(startMark,endMark+1);
            sb=new StringBuilder("");
            for(String listVar:list){
                sb.append(listVar);
            }
            returnSb = new StringBuilder(sb.reverse().toString().trim().replaceFirst("}", "").trim()).reverse();
        }
        return returnSb;
    }
    
    
    
    /**
     * 
     * @Title: readLine
     * @Description: 按行读取文件
     * @param @return
     * @param @throws IOException 方法参数
     * @return String 返回类型
     * @throws 异常信息
     */
    private static StringBuilder readFile2(String pathAndName) throws IOException {
        boolean contentFlag = false;
        StringBuilder sb = new StringBuilder("");
        List<String> list=new ArrayList<String>();
        FileReader reader = new FileReader(pathAndName);
        BufferedReader br = new BufferedReader(reader);
        String str = null;
        while ((str = br.readLine()) != null) {
                sb.append(str + "\n");
                list.add(str + "\n");
        }

        br.close();
        reader.close();
        StringBuilder returnSb = null;
        if (!contentFlag) {
            returnSb = new StringBuilder(sb.reverse().toString().replaceFirst("}", "").trim()).reverse();

        } else {
            returnSb = new StringBuilder(sb.reverse().toString().replaceFirst("edirrevO@", "").trim()).reverse();
        }
        return returnSb;
    }
    

    /**
     * 
     * @Title: writeFile
     * @Description: 写入文件
     * @param @param pathAndName
     * @param @param content
     * @param @throws IOException 方法参数
     * @return void 返回类型
     * @throws 异常信息
     */
    private static void writeFile(String pathAndName, String content) throws IOException {
        FileWriter writer = new FileWriter(pathAndName);
        BufferedWriter bw = new BufferedWriter(writer);
        bw.write(content);
        bw.close();
        writer.close();
    }

    /**
     * 
     * @Title: toString
     * @Description: 反射生成文件的toString 方法
     * @param @param pathAndName
     * @param @param content
     * @param @throws IOException 方法参数
     * @return void 返回类型
     * @throws ClassNotFoundException
     * @throws 异常信息
     */
    private static StringBuilder toString(String pathAndName) throws ClassNotFoundException {
        StringBuilder sbType = new StringBuilder();
        StringBuilder sbValue = new StringBuilder();
        sbType.append("\n\n");
        sbType.append("\t@Override\n");
        sbType.append("\t" + FLAG + "\n\n");
        Class<?> classAllName = Class.forName((pathAndName.substring(
                pathAndName.indexOf(PATH_APPEND) + PATH_APPEND.length(), pathAndName.indexOf(FILE_TYPE))).replace("\\",
                "."));
        sbType.append("\t\treturn String\n");
        // sbType.append("\t\t\t.format(\"" + classAllName.getSimpleName() +
        // " [");
        sbType.append("\t\t\t.format(\"" + classAllName.toString() + " [");
        Class<?> superClass = classAllName.getSuperclass();
        Field[] superFields = superClass.getDeclaredFields();
        if (superClass.getSimpleName().equals(SUPER_CLASS)) {
            for (int i = 0; i < superFields.length; i++) {
                if (superFields[i].getName().equals(EXCEPT) || superFields[i].getName().equals("DATE_FORMAT")
                        || superFields[i].getName().equals("HASHCODEERROR")
                        || superFields[i].getName().equals("LINK_CHAR") || superFields[i].getName().equals(EXCEPT)
                        || superFields[i].getName().equals(EXCEPT)) {
                    continue;
                }

                sbType.append(superFields[i].getName() + "=%s,");
                sbValue.append("get" + toUpperCaseFirstOne(superFields[i].getName()) + "(),");

            }
        }

        Field[] fields = classAllName.getDeclaredFields();
        for (int j = 0; j < fields.length; j++) {
            if (fields[j].getName().equals(EXCEPT)) {
                continue;
            }
            if (j == fields.length - 1) {
                sbType.append(fields[j].getName() + "=%s");
                sbValue.append(fields[j].getName() + ");");
            } else {
                sbType.append(fields[j].getName() + "=%s,");
                sbValue.append(fields[j].getName() + ",");
            }

        }
        sbType.append("]\",\n");
        sbType.append("\t\t\t\t" + sbValue + "\n\n");
        sbType.append("\t}\n\n");
        sbType.append("}");
        return sbType;
    }

    /**
     * 
     * @Title: getFiles
     * @Description: 通过递归得到某一路径下所有的目录及其文件
     * @param @param filePath 方法参数
     * @return void 返回类型
     * @throws 异常信息
     */
    private static void getFiles(String filePath) {
        File root = new File(filePath);
        File[] files = root.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                getFiles(file.getAbsolutePath());
            } else {
                if (file.getName().endsWith(FILE_TYPE)) {
                    filelist.add(file.getAbsolutePath());
                }
            }
        }
    }

    /**
     * 
     * @Title: create
     * @Description: 通过文件路径生成
     * @param @param projectDir
     * @param @throws IOException 方法参数
     * @return void 返回类型
     * @throws ClassNotFoundException
     * @throws 异常信息
     */
    private static void create(String projectDir) throws IOException, ClassNotFoundException {

        getFiles(projectDir + PATH_APPEND + PACKAGE_PATH.replace(".", "\\") + "\\");
        StringBuilder fileContent = new StringBuilder();
        for (String files : filelist) {
            fileContent = readFile(files);
            fileContent.append(toString(files));
            writeFile(files, fileContent.toString());
        }
    }

    /**
     * 
     * @Title: toLowerCaseFirstOne
     * @Description: 首字母转小写
     * @param @param s
     * @param @return 方法参数
     * @return String 返回类型
     * @throws 异常信息
     */
    private static String toLowerCaseFirstOne(String s) {
        if (Character.isLowerCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
    }

    /**
     * 
     * @Title: toUpperCaseFirstOne
     * @Description: 首字母转大写
     * @param @param s
     * @param @return 方法参数
     * @return String 返回类型
     * @throws 异常信息
     */
    private static String toUpperCaseFirstOne(String s) {
        if (Character.isUpperCase(s.charAt(0)))
            return s;
        else
            return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
    }

    static class  ArrayListRemove<E> extends ArrayList<E>{
        
        public boolean contains(Object o) {
           return super.contains(o);
        }
        
        public void removeRange(int fromIndex, int toIndex) {
              super.removeRange(fromIndex,toIndex);
         }
        
    }
    
    public static void main(String[] args) {

        String projectDir = System.getProperty("user.dir");
        try {
            create(projectDir);

        } catch (Exception e) {

            System.out.println("创建ToString方法失败");
        }

    }
}
最近下载更多
拉不下553016  LV1 2018年6月7日
583531906  LV1 2018年5月4日
194003520  LV1 2016年6月5日
mke123  LV7 2016年4月9日
最代码官方  LV167 2016年1月27日
最近浏览更多
maozexi  LV7 2021年11月30日
zhangzhigang  LV2 2021年3月5日
Misshuang  LV13 2020年6月9日
打手犯规了  LV1 2019年9月5日
Kira9277 2019年9月4日
暂无贡献等级
chenmsrong  LV9 2019年1月28日
1247879478  LV8 2018年11月21日
拉不下553016  LV1 2018年6月7日
583531906  LV1 2018年5月4日
springmvc--stu  LV5 2018年3月28日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友