如何在eclipse中的所有java文件中添加一行
我不确定这是否可行,但我有一个拥有1000多个java文件的旧Java应用程序项目。我试图添加log4j支持到需要我添加的应用程序如何在eclipse中的所有java文件中添加一行
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,类型的内容 - “模板” 并选择模板 - Java编辑器如下图所示
导入从右从菜单中的文件,如下图所示
现在去你的任何文件,并键入“记录仪”在你的类文件,然后执行CTRL +空格,快速如下图所示
帮助会告诉你的“记录仪”模板 和日志记录语句将出现,与你的类中,你正在编辑如下图所示
如果你有记事本++,你可以做到这一点。使用正则表达式的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.
}
希望它让你的手与你的要求。最好的祝福。
这会工作。需要确保类名是那里大部分时间的文件名其他解析太 – 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开始的好地方。
我会检查它听起来不错的方法 – Ashish
您可以运行下面的命令来添加具体的行号的任何线路,只需提供文件夹名称,它将搜索所有子文件夹与文件扩展名为的.java和添加的特定位置的路线:
find <Folder Path> -name "*.java" -exec sed -i '1i<Text: You want to add>' {} \;
我假设你也需要添加import语句,对不对?您可以尝试编写一个程序来浏览文件目录,打开每个.java文件并为您添加它。 –
看起来不是java问题,而是编写shell脚本插入必要的行的问题。 – svz
是的,我将不得不添加log4j导入,这将是非常棒的 – Ashish