gpt4 book ai didi

java - 在 Java 中现有数据之间添加文本文件中的数据

转载 作者:行者123 更新时间:2023-12-02 04:39:08 26 4
gpt4 key购买 nike

我需要在文本/java文件中的类名或方法名之前添加这是一个类这是一个方法(行号可通过japa获得) .

我已经尝试了所有可能的情况,尝试使用文件读取器/写入器编辑文本/Java文件(但它总是附加在末尾,并且想要上面的类/方法名称)、pmd、japa(可以读取但可以找不到编辑选项)和随机访问文件界面(也可以编辑,但它不会附加而是覆盖字符)。

到目前为止没有任何帮助,有什么办法可以实现这一目标吗?

例如原始源码:

import java.lang.*;
class test1{
public static void main(String[] args) {
System.out.println("hello world");
}
}

之后

import java.lang.*;
/*this is a class*/
class test1{
/*this is a method*/
public static void main(String[] args) {
System.out.println("hello world");
}
}

最佳答案

您可以使用 JavaParser 并实现您自己的 ModifierVisitorAdapter。在下面找到一个您可以开始使用的小片段。

import japa.parser.JavaParser;
import japa.parser.ParseException;
import japa.parser.ast.CompilationUnit;
import japa.parser.ast.Node;
import japa.parser.ast.body.ClassOrInterfaceDeclaration;
import japa.parser.ast.body.MethodDeclaration;
import japa.parser.ast.comments.BlockComment;
import japa.parser.ast.visitor.ModifierVisitorAdapter;
import java.io.File;
import java.io.IOException;

public class ModifierVisitorAdapterDemo {

public static void main(String[] args) throws IOException, ParseException {
File sourceFile = new File("Test.java");
CompilationUnit cu = JavaParser.parse(sourceFile);
cu.accept(new ModifierVisitor(), null);

// instead of printing it to stdout you can write it to a file
System.out.println("// enriched cource");
System.out.println(cu.toString());

// to save it into the original file
// this will overwrite the input file
Files.write(sourceFile.toPath(),
cu.toString().getBytes(Charset.defaultCharset()),
StandardOpenOption.TRUNCATE_EXISTING
);
}

private static class ModifierVisitor extends ModifierVisitorAdapter {

@Override
public Node visit(ClassOrInterfaceDeclaration n, Object arg) {
if (!n.isInterface()) {
n.setComment(new BlockComment(" this is a class "));
}
return super.visit(n, arg);
}

@Override
public Node visit(MethodDeclaration n, Object arg) {
n.setComment(new BlockComment(" this is a method "));
return super.visit(n, arg);
}
}
}

假设以下输入文件Test.java

import java.lang.System;

class Test {

static class Foo {
}

static interface IFace {
}

public static void main(String... args) {
}
}

输出将是

// enriched cource
import java.lang.System;

/* this is a class */
class Test {

/* this is a class */
static class Foo {
}

static interface IFace {
}

/* this is a method */
public static void main(String... args) {
}
}

关于java - 在 Java 中现有数据之间添加文本文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30388441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com