JavaParser不更新源文件

JavaParser不更新源文件,java,abstract-syntax-tree,visitor,javaparser,compilationunit,Java,Abstract Syntax Tree,Visitor,Javaparser,Compilationunit,我正在使用并关注它的维基。问题是,即使我更改了方法的名称并向其中添加了一个参数,文件也不会更新。换句话说,更改不会保存。当I System.out.println位于更改后的编译单元中时,它会将更改打印出来,但这些更改根本不会影响源文件 是否有类似CompilationUnit.update的内容,或者我遗漏了什么 我在Wiki中使用的示例: files_list = FilePicker.chooseAndGetJavaFiles(); if (files_list == n

我正在使用并关注它的维基。问题是,即使我更改了方法的名称并向其中添加了一个参数,文件也不会更新。换句话说,更改不会保存。当I System.out.println位于更改后的编译单元中时,它会将更改打印出来,但这些更改根本不会影响源文件

是否有类似CompilationUnit.update的内容,或者我遗漏了什么

我在Wiki中使用的示例:

    files_list = FilePicker.chooseAndGetJavaFiles();

    if (files_list == null || files_list.isEmpty()) {
        Errors.showError(Errors.COMMENT_GENERATOR_FILELIST_NULL_OR_EMPTY);
    } else {

        CompilationUnit cu = null;
        FileInputStream in = new FileInputStream(files_list.get(0));
        try {
            cu = JavaParser.parse(in);
        } catch (ParseException ex) {
            Logger.getLogger(CommentGenerator.class.getName()).log(Level.SEVERE, null, ex);
        } finally{
            in.close();
        }
        new MethodChangerVisitor().visit(cu,null);

        System.out.println(cu.toString());
    }
}

private static class MethodChangerVisitor extends VoidVisitorAdapter{

    @Override
    public void visit(MethodDeclaration n, Object arg) {
       // change the name of the method to upper case
        n.setName(n.getName().toUpperCase());

        // create the new parameter
        Parameter newArg = ASTHelper.createParameter(ASTHelper.INT_TYPE, "value");

        // add the parameter to the method
        ASTHelper.addParameter(n, newArg);

    }


}
编辑: 这就是解决办法; 在下面的行中添加

Files.write(new File("Modified.java").toPath(), cu.toString(), StandardCharsets.UTF_8);
在下面的行中更改为使用特殊字符,例如:gş,ö,ü

cu = JavaParser.parse(files_list.get(0));


既然您已经有了字符串表示法,那么以下内容如何:

Files.write(new File("Modified.java").toPath(), cu.toString(), StandardCharsets.UTF_8);

既然您已经有了字符串表示法,那么以下内容如何:

Files.write(new File("Modified.java").toPath(), cu.toString(), StandardCharsets.UTF_8);

为什么您希望解析器修改其数据源?不应该这样做,特别是因为源代码可能不是来自文件,而是来自其他数据源。而且解析器不知道如何修改任意的输入流。@RolandIllig我不理解你在这里的陈述。如果您查看页面,它有一个可修改的功能。另外,如果它不修改源代码,为什么会有像setName或setComment这样的方法?愚蠢的我,我现在明白了,但问题仍然存在,我该如何更改源文件?@Nerzid:应该是cu=JavaParser.parsefiles\u list.get0,StandardCharsets.UTF\u 8;如果我没弄错的话?您使用字符串UTF-8的示例在@my side不起作用,而常量则起作用……为什么您希望解析器修改其数据源?不应该这样做,特别是因为源代码可能不是来自文件,而是来自其他数据源。而且解析器不知道如何修改任意的输入流。@RolandIllig我不理解你在这里的陈述。如果您查看页面,它有一个可修改的功能。另外,如果它不修改源代码,为什么会有像setName或setComment这样的方法?愚蠢的我,我现在明白了,但问题仍然存在,我该如何更改源文件?@Nerzid:应该是cu=JavaParser.parsefiles\u list.get0,StandardCharsets.UTF\u 8;如果我没弄错的话?您使用字符串UTF-8的示例在@my side不起作用,而另一方面常量起作用……谢谢!这实际上是可行的,但这里还有另一个问题,CompliationUnit不能识别UTF-8字符。。成为� .我也解决了特殊性格的问题。若任何人都有相同的问题,那个么必须按如下方式将编码参数传递给JavaParser CompliationUnit cu=JavaParser.parserfile,UTF-8;再次感谢@RolandIlligI假设您的源文件是用UTF-8编码的,因为这是当今最常见的编码。显然我错了,所以试着用StandardEncodings.ISO_8859_1保存文件,这对标准Windows编码代码页1252很有效。这很奇怪。当您使用将文件解释为ISO 8859-1的读取器读取一个实际为UTF-8的文件时,字符ö应该显示为è而不是替换字符。实际上,您对UTF-8的看法是正确的。问题与CompilationUnit在未使用utf-8编码的情况下获取源文件有关:谢谢这实际上是可行的,但这里还有另一个问题,CompliationUnit不能识别UTF-8字符。。成为� .我也解决了特殊性格的问题。若任何人都有相同的问题,那个么必须按如下方式将编码参数传递给JavaParser CompliationUnit cu=JavaParser.parserfile,UTF-8;再次感谢@RolandIlligI假设您的源文件是用UTF-8编码的,因为这是当今最常见的编码。显然我错了,所以试着用StandardEncodings.ISO_8859_1保存文件,这对标准Windows编码代码页1252很有效。这很奇怪。当您使用将文件解释为ISO 8859-1的读取器读取一个实际为UTF-8的文件时,字符ö应该显示为è而不是替换字符。实际上,您对UTF-8的看法是正确的。问题与CompilationUnit在未使用utf-8编码的情况下获取源文件有关: