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

问题描述:

我不确定这是否可行,但我有一个拥有1000多个java文件的旧Java应用程序项目。我试图添加log4j支持到需要我添加的应用程序如何在eclipse中的所有java文件中添加一行

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

在每个文件中。

有没有什么办法可以使用eclipse来执行操作。我试过source->format,但那不允许我添加该行。我必须打开每个文件并添加该行吗?

+2

我假设你也需要添加import语句,对不对?您可以尝试编写一个程序来浏览文件目录,打开每个.java文件并为您添加它。 –

+3

看起来不是java问题,而是编写shell脚本插入必要的行的问题。 – svz

+0

是的,我将不得不添加log4j导入,这将是非常棒的 – Ashish

您可以在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,类型的内容 - “模板” 并选择模板 - Java编辑器如下图所示

enter image description here

导入从右从菜单中的文件,如下图所示

enter image description here

现在去你的任何文件,并键入“记录仪”在你的类文件,然后执行CTRL +空格,快速如下图所示

enter image description here帮助会告诉你的“记录仪”模板 和日志记录语句将出现,与你的类中,你正在编辑如下图所示

enter image description here

+0

模板找到并替换模板只适用于新这就是为什么我要检查是否必须编辑每个文件或不是, – Ashish

+0

不,不,您可以检查“模板”视图,例如你可能已经在eclipse – ajduke

+0

中使用过“syso”了,我会告诉你你的案例模板。 – ajduke

Ope宇宙每个文件,并添加此行将是乏味的。

我不确定Eclipse是否有这样的事情。

但我会建议去一个shell脚本或Java功能来做到这一点。

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

我知道这可能不是最适合您的解决方案。

希望这会有所帮助。

+0

我不跟shell脚本familer,所以我会用java功能 – Ashish

+2

你可以用'this.getClass去()'在记录器语句中,以避免需要解析类名称。 – svz

如果你有记事本++,你可以做到这一点。使用正则表达式的direcory的查找替换功能。

所以一条以public class开头的行需要用行和另一行替换为log语句。

你可以通过编程的方式来完成。开始与所有的.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. 
} 

希望它让你的手与你的要求。最好的祝福。

+0

这会工作。需要确保类名是那里大部分时间的文件名其他解析太 – tgkprog

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

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

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

主要AspectJ website。并且the AspectJ programming guide是AspectJ开始的好地方。

+0

我会检查它听起来不错的方法 – Ashish

您可以运行下面的命令来添加具体的行号的任何线路,只需提供文件夹名称,它将搜索所有子文件夹与文件扩展名为的.java和添加的特定位置的路线:

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