Preciso acessar o conteúdo de um jar. Só que esse jar, é o jar que está em execução. Dentro dele, tenho uma pasta (ramaisgrupo) que preciso acessá-la, e executar um de seus arquivos(Ramais.jar).
Descompactar esse jar e acessar a pasta ramaisgrupo (Achei uma classe, mas ela não está conseguindo descompactar o jar todo, apenas começa e depois para);
Acessar esse jar em execução, abrir a pasta ramaisgrupo e executar (Runtime.getRuntime(…)) o aquivo Ramais.jar (Porém não tenho nem ideia de como se fazer).
Por enquanto não consegui solução alguma, mas qual das duas seria melhor?
Segue o código da classe que estou usando para descompactar. Essa classe chega a criar a pasta descompactada e alguns arquivos, mas não cria o resto. Alguém poderia me ajudar :?:
publicclassArquivador{privatestaticfinalStringBARRA="/";privatestaticfinalStringBARRA_INVERTIDA="\\";privatestaticfinalintTAMANHO_BUFFER=512000;publicstaticvoidmain(Stringfiles[]){try{finalArquivadorarquivador=newArquivador();BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));System.out.print("opcao [c = compactar] [d = descompactar] [s = sair]: ");Stringoperacao=br.readLine();Stringorigem=null;Stringdestino=null;if("c".equalsIgnoreCase(operacao)){System.out.println("COMPACTAR");System.out.print("arquivo(s) a ser(em) compactado(s): ");origem=br.readLine();System.out.print("arquivo de destino: ");destino=br.readLine();String[]origens=arquivador.separaArquivos(origem);arquivador.compacta(origens,destino);}elseif("d".equalsIgnoreCase(operacao)){System.out.println("DESCOMPACTAR");System.out.print("arquivo a ser descompactado: ");origem=br.readLine();System.out.print("diretorio de destino: ");destino=br.readLine();arquivador.descompacta(origem,destino);}elseif(!"s".equalsIgnoreCase(operacao)){System.out.println("opcao invalida");main(files);}System.out.println("concluido");}catch(Throwablet){t.printStackTrace();}}publicvoidcompacta(String[]origens,Stringdestino)throwsIOException{intlength=origens==null?0:origens.length;if(length==0||destino==null){return;}FileOutputStreamfos=newFileOutputStream(destino);ZipOutputStreamzos=newZipOutputStream(fos);zos.setMethod(ZipOutputStream.DEFLATED);Filefile=newFile(origens[0]).getParentFile();Stringroot=file==null?null:file.getCanonicalPath();for(inti=0;i<length;i++){file=newFile(origens[i]);if(file.isDirectory()){varreDiretorio(root,origens[i],zos);}else{adicionaArquivo(root,origens[i],zos);}}zos.close();}publicvoiddescompacta(Stringorigem,Stringdestino)throwsIOException{if(origem==null||destino==null){return;}FileInputStreamfis=newFileInputStream(origem);ZipInputStreamzis=newZipInputStream(fis);FileOutputStreamfos=null;BufferedOutputStreambos=null;ZipEntryze=null;Stringname=null;while((ze=zis.getNextEntry())!=null){name=destino+BARRA_INVERTIDA+ze.getName();try{fos=newFileOutputStream(name);}catch(FileNotFoundExceptionexc){montaDiretorio(name);fos=newFileOutputStream(name);}bos=newBufferedOutputStream(fos,TAMANHO_BUFFER);System.out.println("descompactando: '"+ze.getName()+"'");intbytes;bytebuffer[]=newbyte[TAMANHO_BUFFER];while((bytes=zis.read(buffer,0,TAMANHO_BUFFER))!=-1){bos.write(buffer,0,bytes);}bos.flush();bos.close();}zis.close();}privatevoidadicionaArquivo(finalStringraiz,finalStringarquivo,finalZipOutputStreamsaida)throwsIOException{if(arquivo.length()>0){intlength=raiz==null?0:raiz.length();Stringname=length>0?arquivo.substring(length):arquivo;name=name.replaceAll(BARRA,BARRA_INVERTIDA);while(name.startsWith(BARRA_INVERTIDA)){name=name.substring(1);}System.out.println("compactando '"+name+"'");ZipEntryentry=newZipEntry(name);saida.putNextEntry(entry);FileInputStreamfis=newFileInputStream(arquivo);intoffset=0;byte[]buffer=newbyte[TAMANHO_BUFFER];while((offset=fis.read(buffer,0,TAMANHO_BUFFER))!=-1){saida.write(buffer,0,offset);}fis.close();}}privateString[]listaConteudo(Filediretorio)throwsIOException{File[]files=diretorio.listFiles();intlength=files==null?0:files.length;String[]children=newString[length];Filef=null;for(inti=0;i<length;i++){children[i]=files[i].getCanonicalPath();}returnchildren;}privatevoidmontaDiretorio(Stringnome)throwsIOException{Filef;StringBuffersb=newStringBuffer();StringTokenizerst=newStringTokenizer(nome,BARRA_INVERTIDA);inttokens=st.countTokens()-1;for(inti=0;i<tokens;i++){sb.append(st.nextToken()+BARRA_INVERTIDA);}f=newFile(sb.toString());f.mkdirs();}privateString[]separaArquivos(Stringtexto){StringTokenizerst=newStringTokenizer(texto,";");inttokens=st.countTokens();String[]array=newString[tokens];for(inti=0;i<tokens;i++){array[i]=st.nextToken();}returnarray;}privatevoidvarreDiretorio(finalStringraiz,finalStringdiretorio,finalZipOutputStreamsaida)throwsIOException{Filefile=newFile(diretorio);String[]files=file.list();intlength=files==null?0:files.length;Stringcaminho=null;for(inti=0;i<length;i++){file=newFile(diretorio,files[i]);caminho=file.getCanonicalPath();if(file.isDirectory()){varreDiretorio(raiz,caminho,saida);}else{adicionaArquivo(raiz,caminho,saida);}}saida.flush();}}
B
Bruno_Leonardo
Galera,
Consegui através do excelente artigo que achei aqui no GUJ (Zip com Java). Muito bom mesmo esse artigo. Segue o link para os interessados:
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: http://www.guj.com.br/java.tutorial.artigo.181.1.guj
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
G
gcoletaalves
BrunoLeo, estou tendo problemas ao extrair os arquivos com a aplicação já compilada (em tempo de desenvolvimento esta OK). pode postar seu código p/ eu ver como ficou?