项目中导入 jdk\lib\tools.jar 包
package io.bm.utils;
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSONObject;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.RootDoc;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class DocReader {
public DocReader() {
}
private static RootDoc root;
public static String getJsonStr(){
ClassDoc[] classes = root.classes();
JSONObject jsonObject = new JSONObject();
jsonObject.put("type","object");
JSONObject properties = new JSONObject();
for (int i = 0; i < classes.length; i++) {
System.out.println(classes[i]);
System.out.println(classes[i].commentText());
for (FieldDoc field : classes[i].fields(false)) {
JSONObject fj = new JSONObject();
fj.put("description",field.commentText());
fj.put("type",getTypeName(field.type().simpleTypeName()));
properties.put(field.name(),fj);
}
}
jsonObject.put("properties",properties);
return jsonObject.toJSONString();
}
private static String getTypeName(String type){
String result;
if("String".equalsIgnoreCase(type)||"Date".equalsIgnoreCase(type)){
result="string";
}else if("Double".equalsIgnoreCase(type)||"Integer".equalsIgnoreCase(type)
||"Float".equalsIgnoreCase(type)||"Long".equalsIgnoreCase(type)||"BigDecimal".equalsIgnoreCase(type)){
result="number";
}else if(!Objects.isNull(type)&& "List".equals(type)){
result="array";
}else{
result="object";
}
return result;
}
public static RootDoc getRoot(){
return root;
}
private static void exec(String filePath) {
com.sun.tools.javadoc.Main.execute(
new String[]{
"-doclet",
DocLet.class.getName(),
"-encoding","utf-8",
"-classpath",
"D:\\wrok\\git_space\\ngs_bid\\target\\classes;" +
"C:\\Users\\Administrator\\.m2\\repository\\io\\swagger\\swagger-annotations\\1.5.20\\swagger-annotations-1.5.20.jar;" +
"C:\\Users\\Administrator\\.m2\\repository\\org\\projectlombok\\lombok\\1.18.16\\lombok-1.18.16.jar;" +
"C:\\Users\\Administrator\\.m2\\repository\\com\\baomidou\\mybatis-plus-extension\\3.4.0\\mybatis-plus-extension-3.4.0.jar;"+
"C:\\Users\\Administrator\\.m2\\repository\\com\\baomidou\\mybatis-plus-annotation\\3.4.0\\mybatis-plus-annotation-3.4.0.jar;" +
"C:\\Users\\Administrator\\.m2\\repository\\com\\alibaba\\fastjson\\1.2.75\\fastjson-1.2.75.jar;" +
"C:\\Users\\Administrator\\.m2\\repository\\bmdata\\com\\spring-boot-starter-framework\\1.2.69-31\\spring-boot-starter-framework-1.2.69-31.jar",
filePath
});
}
public static class DocLet{
public DocLet() {
}
public static boolean start(RootDoc root){
DocReader.root=root;
return true;
}
}
public static void main(String[] args) {
List<File> list = new ArrayList<>();
getDirectory("D:\\wrok\\git_space\\ngs_bid\\src\\main\\java\\io\\bm",list);
list.forEach(v->{
System.out.println(v.getAbsolutePath());
});
File file = new File("D:\\fileRoot\\json.txt");
List<String> allList=new ArrayList<>();
for (File d : list) {
if(d.isDirectory()){
//entity文件下 下面的实体类解析
for (File listFile : Objects.requireNonNull(d.listFiles())) {
String name ="-----" +listFile.getAbsolutePath()+"-------";
String json = getJson(listFile.getAbsolutePath());
allList.add(name);
allList.add(json);
}
}
}
//写入文件
FileUtil.writeUtf8Lines(allList,file);
}
//获取entity所有的文件夹
private static List<File> getDirectory(String path,List<File> pathList){
File file = new File(path);
File[] files = file.listFiles();
List<File> collect = Arrays.stream(files).filter(v -> "entity".equalsIgnoreCase(v.getName())).collect(Collectors.toList());
if(!collect.isEmpty()){
pathList.addAll(collect);
}
for (File f : files) {
if(f.isDirectory()){
getDirectory(f.getAbsolutePath(),pathList);
}
}
return pathList;
}
public static String getJson(String path){
exec(path);
return getJsonStr();
}
}