Voce nao precisa saber o diretorio do seu .class para conseguir carregar
recursos relacionados a ele, mesmo porque, o que voce faria com essa
informacao no caso da sua classe ter sido carregada de outra maquina
(lembre-se, Java _incentiva_ o carregamento de classes via rede), ou qual 
seria o diretorio se a sua classe tivesse sido carregada de dentro de um
.jar (que eh a forma padrao de distribuir aplicacoes Java)?

O responsavel por carregar as classes eh o ClassLoader, e ele sabe carregar
os recursos associados a uma classe (sejam eles imagens, arquivos de
configuracao, ou o que voce quiser), mesmo que esses recursos sejam
carregados via rede.

De uma olhada na documentacao as classes java.lang.ClassLoader e
java.lang.Class, e veja os metodos getResource e similares.

Um metodo estatico para fazer o que voce quer seria:

public static InputStream carregaRecurso(String nomeDaClasse,
                                         nomeDoRecurso) 
{
        Class c = null;
        try {
                c = Class.forName(nomeDaClasse);
        } catch (Exception ex) {
                // isso nao deve acontecer se a sua classe existir
                System.out.println("Classe "+nomeDaClasse+
                                   " nao encontrada.");
                return null;
        }
        InputStream is = c.getResourceAsStream(nomeDoRecurso);
        return is;
}

Para usar voce faria:

[...]

        InputStream is = 
        carregaRecurso("seu.package.SuaClasse", "nomeDoArquivo");
        
        if (is != null) {
                BufferedReader rd = 
                        new BufferedReader(new InputStreamReader(is));
                
                // le a partir do rd
        }

[...]

Observe que nomeDaClasse eh o fully qualified class name
(seu.package.SuaClasse) e eh bom voce verificar o nome que voce tem que dar
para nomeDoRecurso na documentacao, que isso depende de algumas coisas (na
verdade, depende do ClassLoader que esta sendo usado, mas isso eh uma outra
questao que nao vale a pena entrar no merito nesse momento). 

Em geral, voce usa um nome separado por "/" que pode ser ou um nome
absoluto (que inicia com "/"), nesse caso o recurso sera carragado a partir
do diretorio "/" contexto da sua classe (ou seja, a partir do diretorio que
contem os seus packages), ou voce passa um nome relativo (que nao comeca
com "/") e nesse caso o recurso sera carregado de um diretorio a partir do
diretorio que contem a sua classe.

Portanto, para um arquivo no mesmo diretorio que sua classe, voce em vai
passar apenas "nomeDoArquivo" para o metodo ai em cima.

Observe que isso mostra o quao importante eh voce sempre incluir suas
classes em packages, o que muita gente deixa de fazer.

Bruno.

[EMAIL PROTECTED] wrote:

> Alguem sabe se existe uma forma de descobrir em qual diretorio esta o arquivo 
>".class" de um objeto instanciado?
> 
> Por exemplo:
> // Qual o diretorio do arquivo MinhaClasse.class que foi carregado
> // pela JVM para instanciar o objeto "obj"?
> MinhaClasse obj = new MinhaClasse();  
> 
> Tenho um arquivo de configuracao "arquivo.config" gravado no mesmo diretorio da 
>classe "MinhaClasse.class". Esta classe tem um metodo que faz a leitura do 
>arquivo.config. Gostaria fazer com que este metodo funcione independente do diretorio 
>de instalacao da classe, ou seja, nao importa em qual diretorio a classe 
>"MinhaClasse.class" esteja, o arquivo de configuracao "arquivo.config" sempre sera 
>achado, pois os dois sempre estarao juntos.
> 
> Abracos,
> Wilton 
> 
> 
> ------------------------------ LISTA SOUJAVA ---------------------------- 
> http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
> dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> para sair da lista: envie email para [EMAIL PROTECTED] 
> -------------------------------------------------------------------------
> 
> 
> 

Bruno.
______________________________________________________________________
Bruno Peres Ferreira de Souza                         Brazil's JavaMan
http://www.javaman.com.br            mailto:[EMAIL PROTECTED]
        if I fail, if I succeed, at least I live as I believe



------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a