Skip to content
This repository was archived by the owner on Feb 16, 2022. It is now read-only.

Commit a6debb4

Browse files
Merge pull request #3 from StaticDefault/master
Added class finder using package name.
2 parents c064caa + bf974da commit a6debb4

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.realtimetech.reflection.classfile;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.net.URL;
6+
import java.util.Enumeration;
7+
import java.util.LinkedList;
8+
import java.util.List;
9+
10+
public class ClassFinder {
11+
private static void recursiveSearch(File directory, String packageName, List<Class<?>> resultClasses) throws ClassNotFoundException {
12+
if (directory.exists()) {
13+
File[] files = directory.listFiles();
14+
for (File file : files) {
15+
if (file.isDirectory()) {
16+
recursiveSearch(file, packageName + "." + file.getName(), resultClasses);
17+
} else if (file.getName().endsWith(".class")) {
18+
resultClasses.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));
19+
}
20+
}
21+
}
22+
}
23+
24+
public static Class<?>[] getClassInPackages(Class<?> packageInClass) throws IOException {
25+
return getClassInPackages(packageInClass.getPackageName());
26+
}
27+
28+
public static Class<?>[] getClassInPackages(String packageName) throws IOException {
29+
String path = packageName.replace('.', '/');
30+
Enumeration<URL> resources = ClassFinder.class.getClassLoader().getResources(path);
31+
List<File> directories = new LinkedList<File>();
32+
33+
while (resources.hasMoreElements()) {
34+
URL resource = resources.nextElement();
35+
directories.add(new File(resource.getFile()));
36+
}
37+
38+
LinkedList<Class<?>> resultClasses = new LinkedList<Class<?>>();
39+
40+
for (File directory : directories) {
41+
try {
42+
recursiveSearch(directory, packageName, resultClasses);
43+
} catch (ClassNotFoundException e) {
44+
}
45+
}
46+
47+
return resultClasses.toArray(new Class<?>[resultClasses.size()]);
48+
}
49+
}

0 commit comments

Comments
 (0)