2014-10-22 145 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