转载:[JAVA] 读取Java源文件中的注释 - 简书因“注释信息”只存在.java文件中,而不在.class文件中,故只有通过解析*.java文件来获取:1.通过正则表达式2.通过词法分析、语法分析3.通过javadoc或其它...https://www.jianshu.com/p/11adf2e2d000
工具/测试
package com.example.test.Util;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.RootDoc;
import java.util.ArrayList;
/**
* @author: Tyler
* @createDate: 2022/2/8
*/
public class Doclet
{
/**
* 测试
*/
public static void main(String[] args)
{
//java源文件的路径
ArrayList<String> sources=new ArrayList<>();
//项目名开始的路径
sources.add("../test/src/main/java/com/example/test/model/Message.java");
//打印
println(sources);
}
/**
* 打印类及其字段、方法的注释
*
* @param sources java源文件路径
*/
public static void println(ArrayList<String> sources)
{
ArrayList<String> list=new ArrayList<>();
list.add("-doclet");
list.add(Doclet.class.getName());
list.addAll(sources);
com.sun.tools.javadoc.Main.execute(list.toArray(new String[list.size()]));
StringBuilder buffer=new StringBuilder();
ClassDoc[] classes=Doclet.root.classes();
for(ClassDoc classDoc:classes)
{
buffer.append(classDoc.name()).append('\n');
buffer.append('\t').append(classDoc.commentText()).append('\n');
buffer.append('\t').append("字段").append('\n');
FieldDoc[] fields=classDoc.fields(false);
for(FieldDoc field:fields)
{
buffer.append('\t').append('\t').append(field.name()).append('\n');
buffer.append('\t').append('\t').append('\t').append(field.commentText()).append('\n'); //字段上的注释
}
buffer.append('\t').append("方法").append('\n');
MethodDoc[] methods=classDoc.methods();
for(MethodDoc method:methods)
{
buffer.append('\t').append('\t').append(method.name()).append('\n');
buffer.append('\t').append('\t').append('\t').append(method.commentText()).append('\n'); //方法上的注释
}
}
System.out.println(buffer);
}
/** 文档根节点 */
private static RootDoc root;
/**
* javadoc调用入口
*
* @param root
* @return
*/
public static boolean start(RootDoc root)
{
Doclet.root=root;
return true;
}
}
实体:
package com.example.test.model;
/**
* @author: Tyler
* @createDate: 2022/2/8
*/
public class Message {
/**
* 主键id
*/
private int id;
private String subject;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
/**
* 主题
*/
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
/**
* 内容
*/
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}