2013-04-11 40 views
3

我不確定這是否可行,但我有一個擁有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

回答

6

您可以在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

1

Ope宇宙每個文件,並添加此行將是乏味的。

我不確定Eclipse是否有這樣的事情。

但我會建議去一個shell腳本或Java功能來做到這一點。

  1. 閱讀每個文件。
  2. 搜索第一個'{'字符。
  3. 將記錄器語句插入旁邊的行中。
  4. 您可以從文件名中獲取類名。

我知道這可能不是最適合您的解決方案。

希望這會有所幫助。

+0

我不跟shell腳本familer,所以我會用java功能 – Ashish

+2

你可以用'this.getClass去()'在記錄器語句中,以避免需要解析類名稱。 – svz

1

如果你有記事本++,你可以做到這一點。使用正則表達式的direcory的查找替換功能。

所以一條以public class開頭的行需要用行和另一行替換爲log語句。

2

你可以通過編程的方式來完成。開始與所有的.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

1

另一個建議是使用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

0

您可以運行下面的命令來添加具體的行號的任何線路,只需提供文件夾名稱,它將搜索所有子文件夾與文件擴展名爲的.java和添加的特定位置的路線:

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