Pessoal preciso fazer um programinha para compactar varios arquivos de uma extensão .txt que contem em um diretorio e compactar todos… Fiz um procedimento mas esse eu consigo compactar apenas 1 arquivo, eu preciso compactar varios… ALGUEM PODE ME AJUDAR…
public class Estudos{
public static void main(String args[]) {
// nome do arquivo que será compactadoStringarquivo="testes.txt";System.out.println("arquivo esta recebendo testes.txt");//String arquivos[];// Cria um buffer para ler os dados do arquivobyte[]buf=newbyte[1024];try{// Cria o arquivo zipStringcompac="testes.zip";ZipOutputStreamout=newZipOutputStream(newFileOutputStream(compac));System.out.println("criando o arquivo");// Comprime o arquivoFileInputStreamin=newFileInputStream(arquivo);System.out.println("adicionando o arquivo");// Adiciona o arquivo ao fluxo de saídaout.putNextEntry(newZipEntry(arquivo));// transfere dados do arquivo para o arquivo zipintlen;while((len=in.read(buf))>0){out.write(buf,0,len);}// Finaliza a entradaout.closeEntry();in.close();// Completa o arquivo zipout.close();}catch(IOExceptione){// possíveis erros aqui}
privateZip(){}privatestaticbyte[]read(Filefile)throwsException{byte[]result=null;if(file!=null&&!file.isDirectory()){finallonglength=file.length();result=newbyte[(int)length];InputStreamfi=newFileInputStream(file);byteb;longcount=0;while((b=(byte)fi.read())!=-1){result[(int)count++]=b;}fi.close();}returnresult;}/** * @param out - Arquivo destino * @param file - Arquivo ou Diretório a ser zipado * @param path - Caminho do arquivo de destino * @throws Exception */privatestaticbooleanaddToZip(ZipOutputStreamout,Filefile,Stringpath)throwsException{bytedata[]=null;ZipEntryentry=null;if(file!=null){if(file.exists()){if(file!=null){if(file.isDirectory()){File[]files=file.listFiles();for(intcont=0;cont<files.length;cont++){addToZip(out,files[cont],path);}}else{Stringname=file.getName();entry=newZipEntry(name);out.putNextEntry(entry);data=read(file);if(data!=null&&data.length>0){out.write(data,0,data.length);}out.closeEntry();out.flush();}}returntrue;}}returnfalse;}/** * Comprime um diretório ou arquivo. * @param zipName - Nome no arquivo zip que será criado. * @param dirName - Nome do arquivo ou diretório a ser comprimido. */publicstaticbooleanzip(StringzipName,StringdirName){ZipOutputStreamout=null;FileOutputStreamdest=null;CheckedOutputStreamchecksum=null;booleanzipado=false;try{dest=newFileOutputStream(newFile(zipName));checksum=newCheckedOutputStream(dest,newAdler32());out=newZipOutputStream(newBufferedOutputStream(checksum));Filedir=newFile(dirName);Stringparent=dir.getParent();intlength=parent.length();Stringsubstring=parent.substring(0,length);zipado=addToZip(out,dir,substring);}catch(Exceptione){e.printStackTrace();}catch(Errorerr){err.printStackTrace();}finally{try{if(zipado){out.flush();out.finish();out.close();}else{out=null;}}catch(IOExceptione){zipado=false;e.printStackTrace();}catch(Errorerr){zipado=false;err.printStackTrace();}System.gc();}returnzipado;}
}
V
VanessaSoaresPJ
Amigo, vc me passou acima como faz, mas eu nao entendi como em que momento eu vou passar o nome do diretorio ‘diretorio LOG’ e a extensao que ele deve pegar…‘extensao ‘.xlg’’, eu nao entendi em que momento isso ira acontecer… sou iniciante em java tem como vc ve dar essa forcinha… obrigado
V
VanessaSoaresPJ
NAO ENTENDI COMO USA ISSO TEM COMO ME EXPLICAR DANDO EXEMPLOS. meu diretorio é c:\log e a extensao .xlg
/**
@param out - Arquivo destino
@param file - Arquivo ou Diretório a ser zipado
@param path - Caminho do arquivo de destino
@throws Exception
*/
/**
Comprime um diretório ou arquivo.
@param zipName - Nome no arquivo zip que será criado.
@param dirName - Nome do arquivo ou diretório a ser comprimido.
*/
S
SuelmarPJ
Vanessa essas tags não são codigo do JAVA, são tags JAVADOC usadas apenas para poder gerar um documentação da sua classe, parecida com a que a sun disponibiliza no site.
Eu não analise o codigo par ver se ta certo, mas assumindo que ele está correto:
privateZip(){}privatestaticbyte[]read(Filefile)throwsException{byte[]result=null;if(file!=null&&!file.isDirectory()){finallonglength=file.length();result=newbyte[(int)length];InputStreamfi=newFileInputStream(file);byteb;longcount=0;while((b=(byte)fi.read())!=-1){result[(int)count++]=b;}fi.close();}returnresult;}/** * @param out - Arquivo destino * @param file - Arquivo ou Diretório a ser zipado * @param path - Caminho do arquivo de destino * @throws Exception */privatestaticbooleanaddToZip(ZipOutputStreamout,Filefile,Stringpath)throwsException{bytedata[]=null;ZipEntryentry=null;if(file!=null){if(file.exists()){if(file!=null){if(file.isDirectory()){File[]files=file.listFiles();for(intcont=0;cont<files.length;cont++){addToZip(out,files[cont],path);}}else{Stringname=file.getName();entry=newZipEntry(name);out.putNextEntry(entry);data=read(file);if(data!=null&&data.length>0){out.write(data,0,data.length);}out.closeEntry();out.flush();}}returntrue;}}returnfalse;}/** * Comprime um diretório ou arquivo. * @param zipName - Nome no arquivo zip que será criado. * @param dirName - Nome do arquivo ou diretório a ser comprimido. */publicstaticbooleanzip(StringzipName,StringdirName){ZipOutputStreamout=null;FileOutputStreamdest=null;CheckedOutputStreamchecksum=null;booleanzipado=false;try{dest=newFileOutputStream(newFile(zipName));checksum=newCheckedOutputStream(dest,newAdler32());out=newZipOutputStream(newBufferedOutputStream(checksum));Filedir=newFile(dirName);Stringparent=dir.getParent();intlength=parent.length();Stringsubstring=parent.substring(0,length);zipado=addToZip(out,dir,substring);}catch(Exceptione){e.printStackTrace();}catch(Errorerr){err.printStackTrace();}finally{try{if(zipado){out.flush();out.finish();out.close();}else{out=null;}}catch(IOExceptione){zipado=false;e.printStackTrace();}catch(Errorerr){zipado=false;err.printStackTrace();}System.gc();}returnzipado;}
}
Esse código nao está funcionando com arquivos do tipo pdf.
Ele está corrompendo os pdfs.