Stream nao lê arquivo dentro de JAR!

6 respostas
Victor_Neves

pessoal, estou com um problema , estou tentando ler um certificado X509 de dentro de um JAR, na verdade, pe o JAR que le dentro dele mesmo…
quando rodo pelo eclipse ele encontra, quando gero o JAR (usando o fat jar) ele diz que nao encontrou o arquivo… eu deixei o certificado dentro de um pacote.
o código é assim

URL url ; url = ClassLoader.getSystemResource("/resource/publica_sistema.der"); File filePublicKey = new File( url.getFile() );

quando gero o JAR e executo pela linha de comando ele diz que nao encontra, quando rodo pelo eclipse ele encontra, dai o terminal ele imprime apenas um null pointer exception na linha que eu faço um getFile() dentro de new File()

vlw

6 Respostas

E

Claro, FileInputStream náo pode ler um arquivo dentro de um JAR. Náo adianta usar new File (url.getFile()) como vocë fez.

Victor_Neves

humm… alguma sugestão para me ajudar?

E

Para ler algo de um jar, você não usa um FileInputStream mas apenas um InputStream simples

URL url ;  
url = ClassLoader.getSystemResource("/resource/publica_sistema.der");
InputStream stream = url.openStream();

http://docs.oracle.com/javase/6/docs/api/java/net/URL.html#openStream()

Victor_Neves

mas existe uma maneira de obter um objeto File? eu preciso de um objeto File… =/

E

Você pode pegar o valor que está dentro do jar como eu lhe disse e puxar os bytes. Aí você copia os bytes para um arquivo em disco, e usa esse tal arquivo com o File.

Por que é que você precisa de um File? É alguma classe que você não pode mudar e exige ler um arquivo que está no disco?

Victor_Neves

entanglement:
Você pode pegar o valor que está dentro do jar como eu lhe disse e puxar os bytes. Aí você copia os bytes para um arquivo em disco, e usa esse tal arquivo com o File.

Por que é que você precisa de um File? É alguma classe que você não pode mudar e exige ler um arquivo que está no disco?

o chefe insistiu que não queria que o arquivo fosse copiado pra fora do JAR… eu estava fazendo dessa maneira, copiava a chave publica pra fora do JAR, fazia o que tinha que fazer e apagava… dai eu achei uma maneira de ler com ClassLoader.getSystemResourceAsStream, transformei isso em um array de bytes e consegui entregar o array para o bouncy castle… eu achava que precisava do objeto File por que eu nao havia reparado que o bouncy castle pede na verdade nao o objeto File, o mas o array de bytes dele… então passei o array direto…

vlw pela ajuda! hehe

Criado 1 de março de 2013
Ultima resposta 4 de mar. de 2013
Respostas 6
Participantes 2