有办法获取这个属性注释吗 不是注解 业务逻辑涉及到这个东西 之前没获取过注释 反射获取其他的还行 这个要怎么搞
获取文件中的注释,需要将文件以流的方式去读取内容,筛选//和/**/的内容:
package com.ht.test;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PrintComments {
public static void main(String[] args) {
try {
FileReader freader = new FileReader("C:/guess.java");
BufferedReader breader = new BufferedReader(freader);
StringBuilder sb = new StringBuilder();
try {
String temp = "";
/**
* 读取文件内容,并将读取的每一行后都不加\n
* 其目的是为了在解析双反斜杠(//)注释时做注释中止符
*/
while((temp=breader.readLine())!= null)
{
sb.append(temp);
sb.append('\n');
}
String src = sb.toString();
/**
* 1、做/* 注释的正则匹配
*
* 通过渐进法做注释的正则匹配,因为/*注释总是成对出现
* 当匹配到一个/*时总会在接下来的内容中会首先匹配到"*\\/",
* 因此在获取对应的"*\\/"注释时只需要从当前匹配的/*开始即可,
* 下一次匹配时只需要从上一次匹配的结尾开始即可
* (这样对于大文本可以节省匹配效率)——
* 这就是渐进匹配法
*
* */
Pattern leftpattern = Pattern.compile("/\\*");
Matcher leftmatcher = leftpattern.matcher(src);
Pattern rightpattern = Pattern.compile("\\*/");
Matcher rightmatcher = rightpattern.matcher(src);
sb = new StringBuilder();
/**
* begin 变量用来做渐进匹配的游标 {@value}
* 初始值为文件开头
* **/
int begin = 0;
while(leftmatcher.find(begin))
{
rightmatcher.find(leftmatcher.start());
sb.append(src.substring(leftmatcher.start(), rightmatcher.end()));
/** 为输出时格式的美观 **/
sb.append('\n');
begin = rightmatcher.end();
}
System.out.println(sb.toString());
/**
* 2、对//注释进行匹配(渐进匹配法)
* 匹配方法是 // 总是与 \n 成对出现
* */
begin = 0;
Pattern leftpattern1 = Pattern.compile("//");
Matcher leftmatcher1 = leftpattern1.matcher(src);
Pattern rightpattern1 = Pattern.compile("\n");
Matcher rightmatcher1 = rightpattern1.matcher(src);
sb = new StringBuilder();
while(leftmatcher1.find(begin))
{
rightmatcher1.find(leftmatcher1.start());
sb.append(src.substring(leftmatcher1.start(), rightmatcher1.end()));
begin = rightmatcher1.end();
}
System.out.println(sb.toString());
} catch (IOException e) {
System.out.println("文件读取失败");
}finally
{
breader.close();
freader.close();
}
} catch (FileNotFoundException e) {
System.out.println("文件不存在");
}catch(IOException e)
{
System.out.println("文件读取失败");
}
}
}
这玩意编译后就没了,你非要搞,那还不如去获取数据库字段的comment,那都比你这个靠谱
你没有事吧?English和英语有什么区别呢?
https://blog.csdn.net/gzt19881123/article/details/107204689/