当前位置: 首页 > 知识库问答 >
问题:

使用Eclipse JDT解析Java文件

凌和颂
2023-03-14

我使用Eclipse JDT库解析Java源代码来访问类定义的所有方法。当代码在方法主体中包含类似“//xxxx”的注释时,解析器将在注释之前停止,并且忽略方法main(String[]args)。

这是用于解析的示例案例:

public class HelloWorld {

    private String name;
    private int age; 

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
                //Set the age
        this.age = age;
        System.out.println();
    }

    public static void main(String[] args) {

        HelloWorld hw = new HelloWorld();
        if(true) {
            hw.setAge(10);
        }

    }
}

这是我为解析上述示例案例而编写的代码:

public class Parser {

/**
 * Parse java program in given file path
 * @param filePath
 */
public void parseFile(String filePath) {
    System.out.println("Starting to parse " + filePath);
    char[] source = readCharFromFile(filePath);
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setSource(source);
    parser.setResolveBindings(true);
    CompilationUnit cu = (CompilationUnit) parser.createAST(null);

    cu.accept(new ASTVisitor() {

        @Override
        public boolean visit(MethodDeclaration node) {
            return true;
        }

        @Override
        public void endVisit(MethodDeclaration node) {
            System.out.println("Method " + node.getName().getFullyQualifiedName() + " is visited");
        }

    });
}
}

当我使用它解析代码时,它只能得到的结果是getName()setName()getAge()getAge()方法已经被访问,而main()被忽略。

期待你的回答。多谢了。

共有1个答案

戚修雅
2023-03-14

您用来读取源代码的代码似乎有问题。

请尝试下面的代码读取文件:

File javaFile = new File(filePath);
BufferedReader in = new BufferedReader(new FileReader(javaFile));
final StringBuffer buffer = new StringBuffer();
String line = null;
while (null != (line = in.readLine())) {
     buffer.append(line).append("\n");
}

并使用此设置解析器源:

parser.setSource(buffer.toString().toCharArray());

其他的一切似乎都是好的代码。

 类似资料:
  • 问题内容: 我想解析以下网址:http : //eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi? db= nucleotide& id= 224589801 结果,我想出了以下方法: 通过这种方法,我可以获取Item节点的值,但不能获取其任何属性。我尝试使用NamedNodeMap与getAttribute()进行实验,但仍然无济于事。 为什

  • 问题内容: 我有一个C-Header文件,定义了几个构造,包含多个char数组。 我想使用Java解析这些文件。是否存在用于将C-Header文件读入结构的库,或者是否存在可以理解C-Header文件的流解析器? 只是为了获得更多背景信息(我只是在寻找C-Header解析器,而不是针对此特定问题的解决方案):我有一个包含数据的文本文件和一个解释结构的C- Header文件。两者都有点动态,所以我不

  • 如何使用Java Mail MimeMessage解析mime正文部分,我将单独从IMAP服务器获取正文部分。 命令我过去常常独自去取身体的一部分。 这将获取不带头和附件的原始MIME消息(但包含内联图像)。 当我解析提取的内容使用JavaMime消息,我得到错误的结果。 例如:如果原始MIME包含内联图像返回包含内联图像数据的内容 原始MIME: 结果: 任何人都可以建议如何使用MimeMess

  • 我在使用jsoup(Java)解析html文档时遇到了一个问题。我正在分析的HTML具有以下格式: 我想在两个“hr”标记之间隔离HTML文本。我正在尝试以下代码: 系统出来println(对象); 但是ArrayList没有包含我想要的内容,我不知道如何解决它。(我是否可以将“hr”标记转换为“hr”文本“/hr”标记)?

  • 我有这个文件要处理,我正试图找出如何将第二行作为不同的对象来读取。在这一行的末尾,最后一项是公交车的数量。第二行、第四行等应包含idBus和noOfBus,并用逗号分隔。 基于这些课程 我想要一个函数来处理CSV文件中所有公交车和大学线路的列表。它必须使用流API。我不知道这是否可能或如何进行。 当然,可以根据类进行更改,但保留变量,不添加任何额外内容。 我认为最方便的方法是浏览文件,根据两个班级

  • 问题内容: 我想在Java中解析JSON文件,并从下面提到的文件中获取以下值: 从每个元素,我想获得距离和持续时间的值字段。我该怎么做呢? 问题答案: 使用json.org参考实现(org.json主页,在此处下载)。代码有点混乱,但是我认为它可以满足您的要求。通过不创建所有这些对象而是直接访问它们,可以采用很多快捷方式。我这样做的原因是试图使其更容易跟踪发生的事情。