因“注释信息”只存在
.java文件中,而不在
.class文件中,故只有通过解析*.java文件来获取:
1.通过
正则表达式
2.通过
词法分析
、
语法分析
3.通过
javadoc
或其它(
JDT
、
JavaParser
、
Roaster
等)包含词法分析、语法分析的工具,IDE、代码格式化等这类工具一般都包含有
下面是通过javadoc的Doclet实现的
实际测试环境为:java 8
注意:需要在工程中加载jdk中的包$JAVA_HOME/lib/tools.jar
package uuo.tools;
import java.util.ArrayList;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.RootDoc;
* 类说明:打印类及其字段、方法的注释<br>
* 使用javadoc实现<br>
* 需要在工程中加载jdk中的包$JAVA_HOME/lib/tools.jar
public class Doclet
public static void main(String[] args)
//java源文件的路径
ArrayList<String> sources=new ArrayList<>();
sources.add("../uuo/example/Example1.java");
sources.add("../uuo/example/Example2.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();
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)