1

たくさんのパッケージと.javaファイルを含むEclipseプロジェクトがあります。プロジェクト構造をEclipseからテキスト形式/ json形式で取得できるかどうか疑問に思っていましたか?

Package1
     java1
        method1
        method2
        method3
        ...

     java2
        ...


    ...

Package2
    ...

json/text ファイルのように?

日食を使用することは可能ですか?それとも、プロジェクト ディレクトリを整理してファイル構造を再帰的に構築するコードを実際に作成する必要がありますか?

このD3.jsツールを使用してプロジェクト階層を視覚化できるように、これを実行しようとしています。

http://mbostock.github.io/d3/talk/20111018/tree.html

4

2 に答える 2

0

以下のコードが役立つかもしれません。

見つかったすべてのフォルダーとすべてのファイルを印刷します。ファイルが の場合*.java、コードはそれを入力し、Java メソッドに一致するすべてのものを出力します。

また、必要に応じて、メソッドを決定する REGEX を変更します。行は次のとおりです。

public static final String JAVA_METHOD_REGEX = "(public|protected|private|static|\\s) +[\\w\\<\\>\\[\\]]+\\s+(\\w+) *\\([^\\)]*\\)";

完全なコード:

public class ReadFilesAndMethods {
    public static void main(String[] args) throws Exception {
        File folder = new File("C:/Workspace/MyProject/src");
        listFiles(folder, "");
    }

    public static final String JAVA_FILE_REGEX = "^\\w+\\.java";
    public static final String JAVA_METHOD_REGEX = "(public|protected|private|static|\\s) +[\\w\\<\\>\\[\\]]+\\s+(\\w+) *\\([^\\)]*\\)";

    public static void listFiles(File folder, String prefix) throws Exception {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                System.out.println(prefix + fileEntry.getName() + "/");
                listFiles(fileEntry, prefix + "\t");
            } else {
                System.out.println(prefix + fileEntry.getName());
                if (fileEntry.getName().matches(JAVA_FILE_REGEX)) {
                    readMethodsFromJavaFile(fileEntry.getAbsolutePath(), prefix + "\t");
                }
            }
        }
    }

    public static void readMethodsFromJavaFile(String fileName, String prefix) throws Exception {
        Scanner scanner = new Scanner(new File(fileName));
        String text = scanner.useDelimiter("\\A").next();
        scanner.close();
        Pattern pattern = Pattern.compile(JAVA_METHOD_REGEX);
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            System.out.println(prefix+matcher.group(0));
        }
    }
}

出力:

main/
    java/
        utils/
            UsefulStuff.java
                public Long getSomething(Class<?> classe)
                public Whatever load(String anything)
            Start.java
                static void main(String[] args)
        entity/
            system/
                User.java
                    public long getId()
                    public void setId(long id)
...
于 2013-05-13T13:09:49.830 に答える