【问题标题】:Get Project Structure from Eclipse?从 Eclipse 获取项目结构?
【发布时间】:2025-12-10 01:30:01
【问题描述】:

我有一个包含很多包和.java 文件的eclipse 项目。我想知道它是否能够从eclipse中以某种文本形式/ json形式检索项目结构?

Package1
     java1
        method1
        method2
        method3
        ...

     java2
        ...


    ...

Package2
    ...

像在 json/文本文件中那样?

可以使用eclipse吗?还是我真的应该编写一个代码来修剪项目目录并递归构建文件结构?

我正在尝试这样做,以便可以使用此 D3.js 工具可视化项目层次结构:

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

【问题讨论】:

标签: java javascript json eclipse


【解决方案1】:

你在用windows吗?只需在命令行中输入tree yourProjectFolder /F /A > output.txt

【讨论】:

  • 这很好!但它不会给我.java 中的方法。我也需要方法。
【解决方案2】:

也许下面的代码可以帮助你。

它将打印它找到的每个文件夹和每个文件。如果文件是*.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)
...

【讨论】: