Acessando recursos dentro do JAR

3 respostas
J

Pois é galera…Vi que existe uma penca de tópicos a respeito deste assunto aqui no GUJ, todavia em nenhum deles encontrei soluções para o problema…

No meu projeto, preciso ler um dentro do meu jar…Fiz isso através do seguinte código:

URL arquivoDeBibliotecas =((this.getClass()).getClassLoader().getResource("lista_libs_windows"));

        BufferedReader leitor;
        
        if (arquivoDeBibliotecas.getProtocol().equals("jar")) 
        {
            InputStream input = ((this.getClass()).getResourceAsStream(arquivoDeBibliotecas.getFile()));
            JOptionPane.showMessageDialog(null, "É Jar :"+input+"");
            leitor = new BufferedReader(new InputStreamReader(input));  
        } 
        else 
        {
            File arquivo = new File(arquivoDeBibliotecas.getFile());
            FileReader fr = new FileReader(arquivo);
            leitor = new BufferedReader(fr); 
        }
        
        ArrayList<String> lista = new ArrayList();
        
        while(leitor.ready())
        {
            lista.add(leitor.readLine());
        }

Este código teria como objetivo ler o arquivo e colocar cada uma das suas linhas em um ArrayList…Esse monte de if e else, na minha cabeça, descobriria se estou acessando o arquivo de dentro do jar ou não…Para cada caso, um tratamento diferente…Aparentemente está certo.

Estou usando o NetBeans. No meu projeto já tentei colocar esses arquivos direto na raiz e nada. Outro detalhe, meu software é uma applet…

3 Respostas

J

Esqueci de mencionar que a linha 7 está retornando null…

T

“getResourceAsStream” recebe o path relativo, não o nome de um arquivo.

Por exemplo, se você sabe que seu classloader tem acesso ao tal JAR, e o JAR contém o arquivo “/imagens/aplicacao/Imagem.jpg” (dê uma olhadinha no seu JAR; tome cuidado com minúsculas e maiúsculas) …

J

Mas este arquivo está na raiz do jar…Então acho que o caminho pra ele é o nome dele mesmo…Só que até então não funcionou…

Então tive a idéia de colocar esses arquivos no mesmo pacote da classe que tenta acessá-los…Funcionou…Mas ainda não entendi por que. Se alguém souber, ainda estou em busca da informação…

Criado 2 de dezembro de 2008
Ultima resposta 3 de dez. de 2008
Respostas 3
Participantes 2