繁体   English   中英

如何在eclipse中的所有java文件中添加一行

[英]How to add a line in all java files in eclipse

我不确定这是否可行,但我有一个旧的java应用程序项目,其中包含1000多个java文件。 我正在尝试将log4j支持添加到需要我添加的应用程序中

public static Logger logger = Logger.getLogger(MyClass.class.getName());

在每个文件中。

我有什么方法可以使用eclipse执行操作。 我尝试过source->format但是不允许我添加该行。 我是否必须打开每个文件并添加该行?

您可以在eclipse中使用模板 ,但在这种情况下,您需要编辑每个文件并添加它。

更新:

将以下内容保存在一些以扩展名“.xml”命名的文件中

<?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="true" context="java-members" deleted="false" description="adds the logger statement" enabled="true" name="logger">public static Logger logger = Logger.getLogger(${enclosing_type}.class.getName());</template></templates>

按CTRL + 3,键入 - “templates”并选择Templates- Java Editor,如下所示

在此输入图像描述

从右侧导入菜单,如下所示

在此输入图像描述

现在转到您的任何文件并在类文件中键入“logger”并执行CTRL +空格,快速辅助将显示“logger”模板,如下所示

在此输入图像描述 并且您的日志记录将出现在您正在编辑的类中,如下所示

在此输入图像描述

你可以以编程方式完成。 从所有.java的过滤器开始:

public class FileExtensionFilter implements FilenameFilter {
    private Set<String> filteredExtensions;
    public FileExtensionFilter() {
        filteredExtensions = new HashSet<String>();
    }
    @Override
    public boolean accept(File dir, String name) {
        boolean accept = true;
        for (String filteredExtension:filteredExtensions) {
            accept = accept && !name.endsWith(filteredExtension);
        }
        return accept;
    }
    public void addFilteredExtension(String extension) {
        filteredExtensions.add(extension);
    }
}

然后,您可以使用递归方法查找该文件:

public Set<String> searchFileBasedOnExtension(File file) {
    Set<String> extensions = new HashSet<String>();
    if (file.isDirectory()) {
        for (File f : file.listFiles(fileExtensionFilter)) {
            extensions.addAll(checkForExtensions(f));
        }
    } else {
        String extension = file.getName().substring(Math.max(file.getName().lastIndexOf('.'),0));
        extensions.add(extension);
        fileExtensionFilter.addFilteredExtension(extension);
    }
    return extensions;
}

然后根据您收到的集合,您可以迭代它,读取文件以找到添加“导入”的位置,并找到类名,并将其保存到变量中以替换每个文件,因为每个文件代表一个不同的阶级。

样品:

for (String s : setWithFileNames) {
 // Use BufferedReader to read the file, save the content in a String, then look inside the String the classname and the first import position.
 // Use bufferedWriter to re-write the file with the changes you made.
}

希望它能满足您的要求。 最好的祝福。

打开每个文件并添加此行将是乏味的。

我不确定Eclipse是否有这样的东西。

但我建议使用shell脚本或Java函数来执行此操作。

  1. 阅读每个文件。
  2. 搜索第一个'{'字符。
  3. 将logger语句插入其旁边的行中。
  4. 您可以从文件名中获取类名。

我知道这对你来说可能不是最好的解决方案。

希望这可以帮助。

如果你有notepad ++,你可以做到。 对使用正则表达式的目录使用查找替换功能。

所以以public class开头的行需要被行替换,而另一行需要用日志语句替换。

另一个建议是使用AspectJ。 AspectJ是Java的扩展,允许您系统地为现有类编写额外的功能。 您首先需要安装AJDT(AspectJ开发工具)。 然后你需要创建一个这样的Aspect:

aspect LoggingAspect {
  before (Object thiz) : execution(public * *(..)) && this(thiz) {
    Logger logger = Logger.getLogger(thiz.getClass().getName());
    logger.log("Something");
  }
}

上面的方面将记录您编译的其中一个类的公共方法的每次执行。 你当然可以通过多种方式调整它。 记录是AspectJ可以做的最简单的事情之一。 沿着这条路走下去的好处是,您可以通过注释掉4行来轻松启用/禁用项目中的日志记录。

AspectJ的主要网站 AspectJ编程指南是开始使用AspectJ的好地方。

您可以运行以下命令在特定行号上添加任何行,只需提供文件夹名称,它将搜索所有子文件夹,文件扩展名为.java,并在特定位置添加行:

find <Folder Path> -name "*.java" -exec sed -i '1i<Text: You want to add>' {} \;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM