3

それが可能かどうかはわかりませんが、1000 以上の Java ファイルを持つ古い Java アプリケーション プロジェクトがあります。追加が必要なアプリケーションにlog4jサポートを追加しようとしています

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

すべてのファイルで。

日食を使用して操作を実行する方法はありますか。試してみsource->formatましたが、行を追加できません。すべてのファイルを開いてその行を追加する必要がありますか?

4

6 に答える 6

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 を押して、「templates」と入力し、以下に示すように Templates-Java Editor を選択します。

ここに画像の説明を入力

以下に示すように、右のメニューからファイルをインポートします

ここに画像の説明を入力

任意のファイルに移動し、クラス ファイルに「logger」と入力して CTRL+space を実行すると、以下に示すようにクイック アシストに「logger」テンプレートが表示されます

ここに画像の説明を入力 ログ ステートメントが表示され、以下に示すように、編集中のクラスが表示されます。

ここに画像の説明を入力

于 2013-04-11T17:01:12.773 に答える
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.
}

それがあなたの要件に手を貸してくれることを願っています。よろしくお願いします。

于 2013-04-11T17:15:27.907 に答える
1

メモ帳++があればできます。正規表現を使用して、ディレクトリの検索置換機能を使用します。

そのため、で始まる行をpublic class行に置き換え、別の行をログ ステートメントに置き換える必要があります。

于 2013-04-11T17:08:30.523 に答える