Classes dentro de um pacote

4 respostas
LuksS

Tem como saber quais classes estão dentro de um pacote???

4 Respostas

robinsonbsilva

Isso em uma aplicação java?

:?:

LuksS

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

LuksS

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?

LuksS

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;
	}
Criado 28 de janeiro de 2009
Ultima resposta 28 de jan. de 2009
Respostas 4
Participantes 2