Leitura de arquivo dentro de jar AGAIN

6 respostas
georgesq

Colegas, pq se uso
BufferedReader reader = new BufferedReader( new InputStreamReader( LoadXml.class.getResourceAsStream( file )));

consigo ler o arquivo, e se uso

File f = new File(LoadXml.class.getResource(file).getFile());

Ele não consegui ler o mesmo arquivo dentro do meu jar???

Agradecido

6 Respostas

T

Um arquivo dentro de um jar não é um arquivo (File), é uma entrada de um .jar :stuck_out_tongue:

georgesq

isso quer dizer que ???

T

quando você faz isto:

BufferedReader reader = new BufferedReader( new InputStreamReader( LoadXml.class.getResourceAsStream( file )));

você obtém uma InputStream especial, que é o resultado de o ClassLoader procurar a resource no CLASSPATH até achar algo que bata com a especificação passada para getResourceAsStream. Se ele achar no JAR, então essa InputStream é na verdade um tipo de JarInputStream que já lhe dá o resultado descompactado (lembre-se que JAR = ZIP e arquivos ZIP contém normalmente arquivos compactados). Se ele achar “solto” (fora de um .jar, mas no CLASSPATH), é uma FileInputStream mesmo.

Quando você faz da outra maneira (usando File) você pega uma outra coisa que não tem nada a ver.

georgesq

no frigir dos ovos… se preciso ler ele como File, terei que tirar ele do jar…

correto?

T

Uma InputStream não é suficiente para você?
Por que é que você precisa de um File?
Se precisar disso, então você vai ter de extrair mesmo.
(Só para você ter uma idéia. Digamos que fosse possível pegar um File. Esse File seria o arquivo .jar, não o que está contido dentro do .jar. E além disso, se fosse pegar o que está dentro do .jar, poderia estar compactado - aí você teria de descompactar manualmente (argh).

georgesq

entendi, seu raciocinio esta certo… não tenho pra onde correr, vou conversar com a empresa pra ver uma solução, visto q jar é dum sistema em produção

tks manu

Criado 5 de maio de 2006
Ultima resposta 5 de mai. de 2006
Respostas 6
Participantes 2