我不确定是否可能,但我有一个旧的Java应用程序项目,其中有1000多个Java文件。我正在尝试为该应用程序添加log4j支持,这需要我添加
public static Logger logger = Logger.getLogger(MyClass.class.getName());
在每个文件中添加该行。
有没有办法在eclipse中执行此操作。我尝试过source->format
,但它不允许我添加这行。我需要打开每个文件并添加该行吗?
我不确定是否可能,但我有一个旧的Java应用程序项目,其中有1000多个Java文件。我正在尝试为该应用程序添加log4j支持,这需要我添加
public static Logger logger = Logger.getLogger(MyClass.class.getName());
在每个文件中添加该行。
有没有办法在eclipse中执行此操作。我尝试过source->format
,但它不允许我添加这行。我需要打开每个文件并添加该行吗?
<?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>
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;
}
然后根据您收到的设置,可以迭代它,读取文件以查找要添加"import"的位置和类名,并将其保存到变量中,以便替换每个文件,因为每个文件代表不同的类。
示例:
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.
}
aspect LoggingAspect {
before (Object thiz) : execution(public * *(..)) && this(thiz) {
Logger logger = Logger.getLogger(thiz.getClass().getName());
logger.log("Something");
}
}
this.getClass()
来避免需要解析类名。 - svzpublic class
开头的行需要被替换为带有日志语句的另一行。你可以运行下面的命令在特定行号上添加任何行,只需提供文件夹名称,它将搜索所有扩展名为.java的子文件夹,并在特定位置添加行:
find <Folder Path> -name "*.java" -exec sed -i '1i<Text: You want to add>' {} \;