Todas as classes do sistema

Bom dia, preciso descobrir todas as classes q tenho dentro do meu programa, tipo assim, quero criar um array com todas as classes dentro. Tentei usar a classe Package mas nao adiantou muito, ela soh retorna as classes do java…
Alguém tem alguma sugestao?

jah tah resolvido, vlw

Qual foi a solução???

Olá tfrodrigues,

E como vc encontrou? é seria interessante vc postar para seus amigos aqui do GUJ …

dae pessoal, essa eh a solucao…

vlw

import java.io.File;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Set;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
 
 public class ScannerTest {
 	public static void scan(ClassLoader classLoader, Set<String> locations,
 			Set<String> packages) {
 		if (!(classLoader instanceof URLClassLoader)) {
 			return;
 		}
 
 		URLClassLoader urlLoader = (URLClassLoader) classLoader;
 		URL[] urls = urlLoader.getURLs();
 
 		for (URL url : urls) {
 			String path = url.getFile();
 			File location = null;
 			try {
 				location = new File(url.toURI());
 			} catch (URISyntaxException e) {
 				e.printStackTrace();
 				return;
 			}
 
 			// Only process the URL if it matches one of our filter strings
 			if (matchesAny(path, locations)) {
 				if (location.isDirectory()) {
 					getClassesInDirectory(null, location, packages);
 				} else {
 					getClassesInJar(location, packages);
 				}
 			}
 		}
 	}
 
 	public static void getClassesInDirectory(String parent, File location,
 			Set<String> packagePatterns) {
 		File[] files = location.listFiles();
 		StringBuilder builder = null;
 
 		for (File file : files) {
 			builder = new StringBuilder(100);
 			builder.append(parent).append("/").append(file.getName());
 			String packageOrClass = (parent == null ? file.getName() : builder
 					.toString());
 
 			if (file.isDirectory()) {
 				getClassesInDirectory(packageOrClass, file, packagePatterns);
 			} else if (file.getName().endsWith(".class")) {
 				if (matchesAny(packageOrClass, packagePatterns)) {
 					System.out.println(packageOrClass);
 				}
 			}
 		}
 	}
 
 	public static void getClassesInJar(File location,
 			Set<String> packagePatterns) {
 		try {
 			JarFile jar = new JarFile(location);
 			Enumeration entries = jar.entries();
 
 			while (entries.hasMoreElements()) {
 				ZipEntry entry = (ZipEntry) entries.nextElement();
 				String name = entry.getName();
 				if (!entry.isDirectory() && name.endsWith(".class")) {
 					if (matchesAny(name, packagePatterns)) {
 						System.out.println(name);
 					}
 				}
 			}
 		} catch (IOException ioe) {
 			ioe.printStackTrace();
 		}
 	}
 
 	public static boolean matchesAny(String text, Set<String> filters) {
 		if (filters == null || filters.size() == 0) {
 			return true;
 		}
 		for (String filter : filters) {
 			if (text.indexOf(filter) != -1) {
 				return true;
 			}
 		}
 		return false;
 	}
 
 	public static void main(String[] args) {
 		scan(Thread.currentThread().getContextClassLoader(),
 				Collections.EMPTY_SET, Collections.EMPTY_SET);
 	}
 }