tingol, isso significa que para mim adiciona um unico arquivo dentro do .zip eu tenho que cria um temporario e coloca onovo arquivo a ser adicionado la e depois as entradas do arquivo ja existente???
fazer isso eu até faria numa boa, mais tava meio preocupado com performance… isso seria ter que refazer o trabalho, o que nem ia da tanto trabalho pra mim, mais considerando um arquivo grande, por exemplo acima de 500 mega, isso pode demora um pokinhu… bom…de qualquer jeito isso eu perguntei masi na curiosidade, no simples prazer de saber como se faz… enfim
vc saberia me dizer se tem algum metodo ou algum jeito sei la, de se criar pastas vaizas dentro do arquivo .zip???
to passando meu codigo pra vc ver oq q eu to fazendo seisso te ajuda a me ajuda… e obrigadão pela ajuda…
de repente tb fica pra alguem que esteja pesquisando sobre isso no futuro…
public void criaObjetos(final String extensoes[], final boolean copSub, String diretorio, String arquivoSaida){
FileInputStream entrada;
FileOutputStream caminho;
File raiz;
File[] arquivos;
File[] pastas;
ZipOutputStream saida = null;
ZipEntry entry = null;
byte[] buffer;
try{
raiz=new File(diretorio);
caminho = new FileOutputStream(arquivoSaida);
saida=new ZipOutputStream(caminho);
saida.setLevel(9);
criaZip(extensoes, copSub, raiz, saida, "");
saida.close();
}catch(Exception e ){
System.out.println("deu merda");
}
}
public void criaZip(final String extensoes[], final boolean copSub, File pastaEntrada, ZipOutputStream saida, String subPasta){
File[] arquivos = null;
File[] pastas = null;
FileInputStream novoArquivo = null;
ZipEntry entry = null;
FileFilter extencoes, filtroPastas;
try{
if (extensoes!=null){
for (int i=0;i<extensoes.length;i++){
final int I=i;
extencoes = new FileFilter() {
public boolean accept(File f){
return f.getName().endsWith(extensoes[I]);
}
};
arquivos = pastaEntrada.listFiles(extencoes);
for (int j=0;j<arquivos.length;j++){
System.out.println(subPasta+"\"+arquivos[j].getName());
novoArquivo = new FileInputStream(arquivos[j]);
entry = new ZipEntry(subPasta+arquivos[j].getName());
saida.putNextEntry(entry);
int tamanho = novoArquivo.available();
byte[] buffer = new byte[1024];
for (status=0;status<=tamanho;status+=buffer.length){
novoArquivo.read(buffer);
saida.write(buffer);
}
}
// if (arquivos.length><1){
// javax.swing.JOptionPane.showMessageDialog(null, "encontrei uma vazia "+pastaEntrada.getName());
// byte[] buffer = new byte[1024];
// novoArquivo = new FileInputStream(pastaEntrada);
// entry = new ZipEntry(pastaEntrada.getName());
// saida.putNextEntry(entry);
// novoArquivo.read();
// saida.write(novoArquivo.available());
//
// break;
// }
}
}else{
arquivos = pastaEntrada.listFiles();
for (int j=0;j<arquivos.length;j++){
if (!arquivos[j].isDirectory()){
System.out.println(subPasta+"\"+arquivos[j].getName());
novoArquivo = new FileInputStream(arquivos[j]);
entry = new ZipEntry(subPasta+arquivos[j].getName());
saida.putNextEntry(entry);
int tamanho = novoArquivo.available();
byte[] buffer = new byte[1024];
for (status=0;status<=tamanho;status+=buffer.length){
novoArquivo.read(buffer);
saida.write(buffer);
}
}
}
}
filtroPastas = new FileFilter() {
public boolean accept(File f){
return f.isDirectory();
}
};
pastas = pastaEntrada.listFiles(filtroPastas);
for (int j=0;j<pastas.length;j++){
criaZip(extensoes, copSub, pastas[j], saida, pastas[j].getName()+"\");
}
}catch(Exception e){
System.out.println("deu merda no final");
}
}
editando, aquela parte comentada foi que eu tentei cria uma pasta do jeito q ta la… isso ai gera exceção…