Jerry said:
Hi All,
If I have a package, how can I get all the classes from the package?
For example,
Package pak = Package.getPackage ("packageName");
//? Class[] classes = pak.getClasses ??// need to get all the classes
from the package.
Thanks.
Jerry
Here's a little code for it:
public List allClasses() throws Exception {
createClassLoader();
List classes = Util.newList();
for (Iterator it = paths.iterator(); it.hasNext()

{
final File path = (File)it.next();
if (path.isDirectory()) {
Collection classFiles = IO.findFiles(path, ".class");
for (Iterator jt = classFiles.iterator(); jt.hasNext()

{
File classFile = (File)jt.next();
String className = classFile.getName();
int iclass = className.indexOf(".class");
className = className.substring(0, iclass);
for (File trav = classFile.getParentFile();
trav != null && !trav.equals(path);
trav = trav.getParentFile()) {
className = trav.getName() + "." + className;
}
Class c = klass(path, className);
maybeAdd(classes, c);
}
} else if (isJarFile(path)) {
try {
JarFile jarFile = new JarFile(path);
for (Enumeration e = jarFile.entries();
e.hasMoreElements()

{
JarEntry jarEntry = (JarEntry)e.nextElement();
String jarEntryName = jarEntry.getName();
if (jarEntryName.endsWith(".class")) {
String className = jarEntryName.replace('/', '.');
int iclass = className.indexOf(".class");
className = className.substring(0, iclass);
Class c = klass(path, className);
maybeAdd(classes, c);
}
}
} catch (Exception e) {
handle(e,"Trouble with jar " + path);
}
}
}
return classes;
}
private void createClassLoader() {
//
// If already created just return
//
if (loader != null) {
return;
}
if (useSystemClasspath) {
paths.addAll(separate(System.getProperty("sun.boot.class.path")));
}
if (useJavaClasspath) {
paths.addAll(separate(System.getProperty("java.class.path")));
}
loader = new URLClassLoader(urls(this.paths), null);
}