1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java 获取java文件路径_Java怎么获取相对路径下所有的.java文件的信息

java 获取java文件路径_Java怎么获取相对路径下所有的.java文件的信息

时间:2024-02-28 03:49:29

相关推荐

java 获取java文件路径_Java怎么获取相对路径下所有的.java文件的信息

理论上不能,因为java可能动态创建并加载类.

实践上是可能, 假设你不动态创建类, 或动态创建也由你的ClassLoader来处理,或可能忽略那些不是你创建的类

则用Guava反射的方式:Reflectionsreflections=newReflections("com.wy.evolution.framework.controller");Set>allClasses=

reflections.getSubTypesOf(Object.class);

//或者用

ClassPath.getTopLevelClasses(StringpackageName)扫描classpath的方式:

/**

* Scans all classes accessible from the context class loader which belong to the given package and subpackages.

*

* @param packageName The base package

* @return The classes

* @throws ClassNotFoundException

* @throws IOException

*/

private static Class[] getClasses(String packageName)

throws ClassNotFoundException, IOException {

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

assert classLoader != null;

String path = packageName.replace('.', '/');

Enumeration resources = classLoader.getResources(path);

List dirs = new ArrayList();

while (resources.hasMoreElements()) {

URL resource = resources.nextElement();

dirs.add(new File(resource.getFile()));

}

ArrayList classes = new ArrayList();

for (File directory : dirs) {

classes.addAll(findClasses(directory, packageName));

}

return classes.toArray(new Class[classes.size()]);

}

/**

* Recursive method used to find all classes in a given directory and subdirs.

*

* @param directory The base directory

* @param packageName The package name for classes found inside the base directory

* @return The classes

* @throws ClassNotFoundException

*/

private static List findClasses(File directory, String packageName) throws ClassNotFoundException {

List classes = new ArrayList();

if (!directory.exists()) {

return classes;

}

File[] files = directory.listFiles();

for (File file : files) {

if (file.isDirectory()) {

assert !file.getName().contains(".");

classes.addAll(findClasses(file, packageName + "." + file.getName()));

} else if (file.getName().endsWith(".class")) {

classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));

}

}

return classes;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。