Como copiar um arquivo que está dentro de um jar?

9 respostas
gqferreira

Olá pessoal!

Como faço para copiar um jar que esta dentro de outro? Para gravar um arquivo normal uso isso:
InputStream in = new FileInputStream(src);
	      OutputStream out = new FileOutputStream(dst);
	  
	      // Transfer bytes from in to out
	      byte[] buf = new byte[1024];
	      int len;
	      while ((len = in.read(buf)) > 0) {
	          out.write(buf, 0, len);
	      }
	      in.close();
	      out.close();
O endereco do jar a partir do principal é esse:
getClass().getResource("resource/BackupMax.jar")
Ja tô cansado de google... dever umas duas horas que to procurando resposta... :roll:

9 Respostas

B

Já tentou o JarFile?

gqferreira

Você poderia me dar um exemplo? Não estou conseguindo…

B

Você já estava com meio caminho andado, continue nele!

Aqui uma versão para ler um arquivo texto de dentro de um jar. A primeira parte lista o nome de todos os arquivos dentro do jar, a segunda lê um arquivo dado o nome dele:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;

public class ManipuladorJars {

    public static void main(String[] args) throws IOException {

        String local = "/Users/Bruno/Desktop/javax.servlet_2.5.0.jar";
        JarFile jar = new JarFile(local);

        for (Enumeration it = jar.entries(); it.hasMoreElements();) {
            JarEntry entrada = (JarEntry) it.nextElement();

            System.out.println(entrada.getName());
        }

        ZipEntry entrada = jar.getEntry("about_files/LICENSE.txt");

        InputStream is = jar.getInputStream(entrada);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String linha;
        while ((linha = br.readLine()) != null) {
            System.out.println(linha);
        }
        br.close();

    }
}

Troque no lugar dos readers, use o FileInputStream para ler o teu arquivo binário.

gqferreira

Não… você não entedeu…
tenho um jar master (principal) que contem outro, atravez do principal desejo copiar o filho…

fiz um programinha chulo so pra testar isso…
fiz um instalador…
esse instalador é um jar que contem o meu aplicativo…
atravez dele escolho o local de instalação e o instalador copia a aplicação de dentro de si…

gqferreira

Ninguém entra mais pra tentar entender? Ta sempre em 43 visitas há um século… Ninguem consegue me ajudar? :cry: :cry: :cry:

B

O getResourceAsStream do Class já te retorna um InputStream do arquivo que você quer de dentro do Jar. Transforme ele num File numa pasta temporária e carregue ele neste JarFile ou ZipFile para descompactar o resto.

gqferreira

:?: :?

PadrE

Agora quem n entendeu fui eu…

Pelo que o Bruno escreveu basta vc mudar o LICENSE.txt pelo seu jar filho…

Se não for isso o código está bem perto da solução… basta fazer uns testes… Isso se vc n conseguiu resolver esse problema até agora…

Fui !

thundercas

O cara além de estar pedindo ajuda ainda é arrogante…

Criado 18 de julho de 2009
Ultima resposta 9 de dez. de 2009
Respostas 9
Participantes 4