Carregar todas as classes de um diretorio

1 resposta
leonardootto

E ai galerinha.
Achei um código meu que carregava todas as classes que um determinado diretorio.
Alguém conhece alguma forma de fazer isso que seja melhor?
E aproveitando vcs sabem como se carrega todas as classes de um arquivo jar? Tenho que descompacar ele pra fazer isso?
Valew

O código:

import java.io.File;
import java.util.HashMap;
import java.util.logging.Level;

/**
 *  Carrega todas as classes de um determinado diretorio.
 *
 */
public class DiretoryLoading {
    
	private static HashMap map = new HashMap();
	
	public static void loadingDiretory(String str) {
           loadingDiretory(str,"");
    }
    private static void loadingDiretory(String str, String pack) {
        File rootFile = new File(str);
        String[] s = rootFile.list();
        for (int i = 0; i < s.length; i++) {
            File file = new File(str + "\" + s[i]);
            if (file.isDirectory()) {
                String newPacket;
                if(pack.equals("")){
                    newPacket=s[i];
                }else{
                    newPacket=pack+"."+s[i];
                }
                loadingDiretory(str + "\" + s[i], newPacket);
            }
            if (file.getName().endsWith(".class")) {
                try {
                    int n=s[i].indexOf('.');
                    String name = s[i].substring(0,n);
                    Class c;
                    if(pack.equals("")){
                        c = Class.forName(name);
                        
                    }else{
                        c=Class.forName(pack+"."+name);
                        
                    }
                    Object obj= map.get(pack);
                    if(obj==null){
                    	map.put(pack,new HashMap());
                    }else{
                    	HashMap map = (HashMap)obj;
                    	map.put(name,c);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }
    }
    private DiretoryLoading(){};
    
	public static HashMap getMap() {
		return map;
	}
}

1 Resposta

leonardootto

Achei alguns post’s sobre este assunto.

http://www.guj.com.br/posts/list/17478.java
http://www.guj.com.br/posts/list/7500.java

Mas parece que é isso mesmo.
Pegar a lista de arquivos e recursivamente ir carregando os arquivos.
Aquele meu codigo tava meio feio então dei uma melhorada nele.

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
 
 /**
  *  Carrega todas as classes de um determinado diretorio.
  *
  */
 public class DiretoryLoading {
     
    private ArrayList list = new ArrayList();
    private String appPath = System.getProperty("user.dir");
 	
    private static FileFilter filter = new FileFilter(){
	    public boolean accept(File pathname) {
	        if(pathname.getName().endsWith(".class")){
	            return true;
	        }	            
	        return pathname.isDirectory();
	    }  
    };
    
    private void loading(String url){
        getUrls(url);
               
        for (int i = 0; i < list.size(); i++) {
            try {
                String name=((File)list.get(i)).getCanonicalPath();
                name=name.replace(appPath+"\","").replace('\','.').replace(".class","");
                
                Class.forName(name);
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    private void getUrls(String url) {
        File rootFile = new File(url);
        File[] files=rootFile.listFiles(filter);
        for (int i = 0; i < files.length; i++) {
            if(files[i].isDirectory()){
                try {
                    getUrls(files[i].getCanonicalPath());
                } catch (Exception e) {}
            }
            else{
                list.add(files[i]);
            }
        }
    }
    public static void main(String[] args) {
        DiretoryLoading dl = new DiretoryLoading();
        dl.loading(".");
    }
 }

Se alguém precisar de algo parecido ta ai.
T+

Criado 1 de abril de 2006
Ultima resposta 3 de abr. de 2006
Respostas 1
Participantes 1