Tem como saber quais classes estão dentro de um pacote???
Classes dentro de um pacote
4 Respostas
Isso em uma aplicação java?
:?:
sim. Eu vi esse exemplo aqui http://snippets.dzone.com/posts/show/4831
mas por exemplo, ele dá um erro porque não encontra o caminho.
O erro é porque, por exemplo, ele não consegue encontrar o diretório:
C:\Documents%20and%20Settings\usuario\Meus%20documentos\workspace\EJB%20Server\build\br\netsoft\beans
Porque ele tem que ser convertido p/
C:\Documents and Settings\usuario\Meus documentos\workspace\EJB Server\build\br\netsoft\beans
e não tenho idéia de como converter o primeiro formato p/ o último
Já deu p/ sacar que o primeiro formato é aquele usado pelos browsers p/ substituir caracteres estranhos pela sua representação unicode.
Então, se eu tiver a string:
“Lucas\u0020Simão”
\u0020 significa espaço em branco. Como faço p/ converter esse caracter unicode?
Blz:
public static void main(String[] args) throws ClassNotFoundException, IOException {
for(Class<?> c: getClasses("br.netsoft.beans")){
System.out.println(c);
}
}
public static List<Class<?>> getClasses(String packageName)
throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
List<Class<?>> classes = null;
if (classLoader != null){
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(URLDecoder.decode(resource.getPath(),"utf-8")));
}
classes = new ArrayList<Class<?>>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
}
return classes;
}
private static List<Class<?>> findClasses(File directory, String packageName) throws ClassNotFoundException {
List<Class<?>> classes = new ArrayList<Class<?>>();
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;
}