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

JavaParser不更新源文件

司马洲
2023-03-14

我正在使用JavaParser并关注它的Wiki。问题是,即使我更改了方法的名称并向其添加了一个参数,文件也不会更新。换句话说,更改不会被保存。当我系统。出来println更改后的编译单元,它会打印出更改,但这些更改根本不会影响源文件。

有类似于编译单元的东西吗。update()还是我遗漏了什么?

我在维基上使用的例子是:

    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);

在下面的行中更改为使用特殊字符(例如“ş,ö,ü…”)

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

cu = JavaParser.parse(files_list.get(0),"UTF-8");

共有1个答案

司空学智
2023-03-14

既然您已经有了字符串表示,那么这个呢:

Files.write(new File("Modified.java").toPath(), cu.toString(), StandardCharsets.UTF_8);
 类似资料:
  • 问题内容: 我正在做以下事情 在上面的代码中,我试图写入一个Java包中包含的资源文件。执行完代码后,我的程序可以正常运行,但是该文件只是更新web- INF中的属性文件,而不是将其更新到存储它的包中。谁能帮我弄清楚我该如何实现这一目标,或者我在这里做错了什么?非常感谢。 问题答案: 您不应该尝试写入与应用程序类一起存储的文件。根据应用程序服务器的不同,您尝试写入的位置可能无法写入,或者应用程序可

  • 我刚刚在IntelliJ IDEA 14.1.5中创建了一个空白的Java Maven项目(我没有选择原型),它是一个控制台应用程序。通过Maven对话框添加库依赖项后,它被添加到.iml文件中,而不是pom.xml。因此,如果我从IDEA或命令行运行,它将无法找到依赖项。 我做错了什么?(刚刚开始使用JVM/Java)

  •        LSV会不定期对图源进行更新,这时只需点击“图源更新”即可自动更新图源。对于已有图源的更新需要将已加载的图源移除后重新加载才可以看见更新后的效果。

  • 我经常使用某个jar文件来显示文本文件并允许您以不同的方式过滤列表。 在我从Java 7升级到Java 10之前,这一切都非常有效。现在它将不再显示资源文本文件。 下面是我获取jar文件的位置:https://github.com/dragan224/battle_cats_en_combos jar文件的根目录中有两个。jar在其内部使用的txt文件。是否存在阻止此操作的安全设置?还是版本更改导

  • 是否有一个RSS/Atom提要或一个我可以订阅的Git更新邮件列表?我发现很难跟上最新版本,因为我无法知道新版本何时发布。

  • 上游更新其实是很频繁的,时常同步一下最新源码,就可能会有新惊喜。 更新源码的方法与同步源码相同,再次执行 repo sync 即可。 同步完成后,一定要确保执行过 make clean,很多莫名其妙的错误都因为没有执行 clean。 每次开始编译前,都顺手检查一下 jack 服务是否在运行,如果在运行,就把它结束掉,以便腾出内存用于编译。 然后就可以再次编译了,同样是执行 brunch z2_pl