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方法失败");
}
}
}
最近下载更多
最近浏览更多
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日

