2014-10-22 146 views
2

我試圖通過解析它(使用文件)從java src文件夾中獲取包列表。無論封裝結構如何(有些可能是com.example.abc,有些可能是com.example.xxyz.pqr,有些可能是com.application等)我想要得到軟件包列表src文件夾。這是我寫的功能。我得到非常奇怪的輸出。請幫幫我。獲取java項目中的包列表

public static void displayIt(File node) { 

    File[] subNode = node.listFiles(); 

    if (subNode.length == 1) { 

     for (File file : subNode) { 
      if (file.isDirectory()) { 
       packageName = packageName + file.getName(); 
       displayIt(file); 
      } 
     } 
    } 

    else { 
     subFolders = new ArrayList<String>(); 
     for (File file : subNode) { 
      // parent.add(file.getName()); 
      subFolders.add(file.getName()); 
      if (file.isDirectory()) { 
       File[] subDir = file.listFiles(); 
       for (File tempFile : subDir) { 

        if (tempFile.isDirectory()) { 

         // temp=file.getName()+"."+tempFile.getName(); 
         packageList 
           .add(file.getName() + tempFile.getName()); 

         displayIt(tempFile); 
        } 

       } 

      } 

      displayIt(file); 
     } 
    } 

} 
+0

我認爲它是由於'packageName'變量。它應該是displayIt函數 - >'displayIt(File node,String parentPackName)'的參數之一。 – 2014-10-22 03:49:33

+0

什麼是奇怪的輸出? – Radiodef 2014-10-22 03:49:50

+0

如果我有類似的包:** com.example.dao **,** com.example.service **,** com.ui ** ...我得到的輸出(當我打印' packageList')like ** [exampledao,exampleservice] ** – user1636077 2014-10-22 04:02:41

回答

5

,你可以這樣做:

public class Test { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     Set<String> files=new HashSet<>(); 
     listOfPackage("src/",files); 

     System.out.println(files); 
    } 

    public static void listOfPackage(String directoryName, Set<String> pack) { 
     File directory = new File(directoryName); 

     // get all the files from a directory 
     File[] fList = directory.listFiles(); 
     for (File file : fList) { 
      if (file.isFile()) { 
       String path=file.getPath(); 
       String packName=path.substring(path.indexOf("src")+4, path.lastIndexOf('\\')); 
       pack.add(packName.replace('\\', '.')); 
      } else if (file.isDirectory()) { 

       listOfPackage(file.getAbsolutePath(), pack); 
      } 
     } 
    } 
} 

輸出:

[com.think.android, com.think.java, com.test.java] 
+0

謝謝。你的解決方案幫了我很多。 – user1636077 2014-10-22 04:39:32