1

我使用JavaParser並遵循其Wiki。問題是,即使我改變了方法的名稱並添加了一個參數,該文件也不會更新。換句話說,更改不會被保存。當我System.out.println更改CompilationUnit時,它會在更改時打印它,但這些更改完全不會影響源文件。JavaParser不更新源文件

有什麼像CompilationUnit.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); 

更改下面一行的使用特殊字符,以及(如「S,O,ü...)

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

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

您爲什麼期望_parser_修改其數據源?它不應該,特別是因爲源代碼可能不是來自文件而是來自其他數據源。解析器無法知道如何修改任意的InputStream。 –

+0

@RolandIllig我不明白你的陳述。如果您查看[JavaParser](https://github.com/javaparser/javaparser)頁面,它具有可修改的功能。另外如果它不修改源代碼,爲什麼有像setName()或setComment()這樣的方法? – Nerzid

+0

傻,我現在明白,但問題仍然存在,我該如何更改源文件? – Nerzid

回答

3

既然你已經有了字符串表示,這個怎麼樣:

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

謝謝!這實際上起作用了,但在這裏還有另一個問題,CompilationUnit不能識別UTF-8字符(例如ö,ş..變成cha的字符)。 – Nerzid

+1

我解決了特殊問題。如果任何人有同樣的問題,你必須將編碼參數傳遞給JavaParser,如下所示 'CompilationUnit cu = JavaParser.parser(file,「UTF-8」);' 再次感謝你@RolandIllig – Nerzid

+0

我假設你的源文件被編碼爲UTF-8,因爲這是當今最常見的編碼。顯然我錯了,所以試着用'StandardEncodings.ISO_8859_1'保存文件,這對標準的Windows編碼(代碼頁1252)非常有效。 –