2 u012131702 u012131702 于 2014.11.30 13:29 提问

java实现遍历某个包下的Class,注意不是自己写的包。是Java自身的吧。如:java.io

java实现遍历某个包下的Class,注意不是自己写的包。是Java自身的吧。如:java.io包下的所有Class和interface

2个回答

eagleyan
eagleyan   Rxr 2014.11.30 14:09
已采纳

简单说一下方法(假设你要找java.io包下的class)
String javaHome = System.getProperty("java.home");
JarFile jf = new JarFile(javaHome + "/jre/lib/rt.jar");
jf.stream().filter(je -> Pattern.compile("java/io/[A-Z]+[a-z].class").matcher(je.getName()).matches()).foreach(je -> {
... // Add your code here.
});
我这里用了Java 8的lambda语法;如果你不熟悉,基本方法就是便利rt.jar,找出所有的java/io/xxx.class

zhanglj166
zhanglj166   2014.11.30 23:49

参考:http://blog.csdn.net/wangpeng047/article/details/8124390
代码如下:

01.package com.itkt.mtravel.hotel.util;

02.

03.import java.io.File;

04.import java.util.ArrayList;

05.import java.util.List;

06.

07.public class PackageUtil {

08.

09. public static void main(String[] args) {

10. String packageName = "com.itkt.mtravel.hotel";

11.

12. List classNames = getClassName(packageName);

13. for (String className : classNames) {

14. System.out.println(className);

15. }

16. }

17.

18. public static List getClassName(String packageName) {

19. String filePath = ClassLoader.getSystemResource("").getPath() + packageName.replace(".", "\");

20. List fileNames = getClassName(filePath, null);

21. return fileNames;

22. }

23.

24. private static List getClassName(String filePath, List className) {

25. List myClassName = new ArrayList();

26. File file = new File(filePath);

27. File[] childFiles = file.listFiles();

28. for (File childFile : childFiles) {

29. if (childFile.isDirectory()) {

30. myClassName.addAll(getClassName(childFile.getPath(), myClassName));

31. } else {

32. String childFilePath = childFile.getPath();

33. childFilePath = childFilePath.substring(childFilePath.indexOf("\classes") + 9, childFilePath.lastIndexOf("."));

34. childFilePath = childFilePath.replace("\", ".");

35. myClassName.add(childFilePath);

36. }

37. }

38.

39. return myClassName;

40. }

41.}

u012131702
u012131702 是java自身的包,这些都是自己的,有源文件,才行;要是要遍历java内部的包就不行了……
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!