2013-05-08 41 views
0

我有一個很多很多軟件包和.java文件的eclipse項目。我想知道它是否能夠從eclipse中以某種文本格式/ json形式檢索項目結構?從Eclipse獲取項目結構?

Package1 
    java1 
     method1 
     method2 
     method3 
     ... 

    java2 
     ... 


    ... 

Package2 
    ... 

就像在一個JSON /文本文件?

是否有可能使用eclipse?或者我應該實際編寫一個修剪項目目錄並遞歸構建文件結構的代碼?

我試圖做到這一點,這樣我可以想像使用這個D3.js工具項目層次:

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

+0

看一看ant4eclipse。 – 2013-05-08 06:05:56

+0

@ThorbjørnRavnAndersen - 會看起來! :) – ComputerFellow 2013-05-08 06:07:58

+0

也許javadoc可以幫助你。 – Sammy 2013-05-08 06:14:15

回答

0

你使用的是Windows?只需在命令行中輸入tree yourProjectFolder /F /A > output.txt

+0

這是一個很好的!但它不會給我'.java'中的方法。我也需要這些方法。 – ComputerFellow 2013-05-08 06:14:46

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) 
...