正規表現でソースコード中の日本語ベタ打ちを抽出

現在、開発中のシステムで多国語対応(国際化対応?多言語対応?i18n対応?なんていうのが正式?)の必要が出てきたため、その対応に追われております。Javaにはpropertiesファイルによる多国語対応の仕組みがあるので、当然それを採用するんだけど、jspはそんなに数も多くないのでシーケンシャルアクセスで調べてもそんな大変じゃない。しかし、Javaソースコードに埋め込まれた日本語を探し当てるのは結構大変。数が多いからー。
そんな時、メンバーで分担して見ていくか、という話も出たけど、ちょっと待て、僕らはプログラムが書けるじゃないか。そういう機械的な作業は文字通り機械にやってもらいましょう、と言うことで作ったプログラムを公開。
本当は30分くらいでぱぱっと作りたかったけど1時間かかってしまった。。こういうときにスクリプト言語に通じていればもう少し時間・行数ともに少なく書けるんだろうなぁ。
ポイントは正規表現のところです。Shift_JISのほとんどはこれでいける、とこちらにありました。参考にさせていただきました。ありがとうございます。
本当は除外条件(javadoc部とコメント部を除いている)もあわせて1行で書きたかったんだけど、分かりませんでした。誰か教えてくれると嬉しいです。
※「とかの記号類はヒットしない模様です。

public class Main {

    private static final String regex = ".*([ぁ-ヶ]|[亜-鄢])+.*";
    private static final String excludeRegex1 = ".*\\*.*";
    private static final String excludeRegex2 = ".*\\/\\/.*";

    public static void main(String[] args) throws Exception {
        File targetDirectory = new File(args[0]);
        execute(targetDirectory, getUnderNames(targetDirectory));
    }

    private static void execute(File directory, String[] names)
            throws FileNotFoundException, IOException {

        for (String name : names) {
            File target = new File(directory, name);

            if (target.isFile()) {
                printIncludingJapaneseLine(target);
            } else if( target.isDirectory()) {
                execute(target, getUnderNames(target));
            }
        }
    }

    private static void printIncludingJapaneseLine(File f) throws FileNotFoundException, IOException {
        BufferedReader reader = null;

        try {
            String line = null;
            boolean isFirst = true;
            int count = 0;

            reader = new BufferedReader(new FileReader(f));
            while ((line = reader.readLine()) != null) {
                ++count;

                if (line.matches(regex) && !line.matches(excludeRegex1)
                        && !line.matches(excludeRegex2)) {
                    if (isFirst) {
                        System.out.println ("■" + f.getName());
                        isFirst = false;
                    }
                    System.out.println("\t" + count + ":" + line.trim());
                }
            }
        } finally {
            reader.close();
        }
    }

    private static String[] getUnderNames(File targetDirectory) {

        String[] names = targetDirectory.list(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                if (name.matches(".*\\.java")) {
                    return true;
                }
                return new File(dir, name).isDirectory();
            }
        });
        return names;
    }
}