歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java遍歷包中所有類

Java遍歷包中所有類

日期:2017/3/1 10:07:56   编辑:Linux編程

由於項目需要,我想獲得某包下所有的類(包括該包的所有子包),從網上找了找,沒有什麼能用的,即使找到了寫的也不怎樣,效率低下。索性就自己寫吧,正好也鍛煉鍛煉寫代碼的功底。特此分享出來,希望能幫到大家......

  1. package com.itkt.mtravel.hotel.util;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. public class PackageUtil {
  6. public static void main(String[] args) {
  7. String packageName = "com.itkt.mtravel.hotel";
  8. List<String> classNames = getClassName(packageName);
  9. for (String className : classNames) {
  10. System.out.println(className);
  11. }
  12. }
  13. public static List<String> getClassName(String packageName) {
  14. String filePath = ClassLoader.getSystemResource("").getPath() + packageName.replace(".", "\\");
  15. List<String> fileNames = getClassName(filePath, null);
  16. return fileNames;
  17. }
  18. private static List<String> getClassName(String filePath, List<String> className) {
  19. List<String> myClassName = new ArrayList<String>();
  20. File file = new File(filePath);
  21. File[] childFiles = file.listFiles();
  22. for (File childFile : childFiles) {
  23. if (childFile.isDirectory()) {
  24. myClassName.addAll(getClassName(childFile.getPath(), myClassName));
  25. } else {
  26. String childFilePath = childFile.getPath();
  27. childFilePath = childFilePath.substring(childFilePath.indexOf("\\classes") + 9, childFilePath.lastIndexOf("."));
  28. childFilePath = childFilePath.replace("\\", ".");
  29. myClassName.add(childFilePath);
  30. }
  31. }
  32. return myClassName;
  33. }
  34. }

沒什麼特別復雜的,看看基本上就能懂的。給入任意包的命名空間,就能返回該包下的所有類。自我感覺還不錯,簡單易用,通用和擴展性也不錯。其實寫代碼,在有熟練的基本功之後,剩下的就是組裝的思路了。

Copyright © Linux教程網 All Rights Reserved