O código abaixo mostra como zipar todos os arquivos de um determinado diretório.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | import java.io.*; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * Created by William Suane on 8/30/2016. */ public class ZipandoTest { public static void main(String[] args) { /*Esse é o path em que será salvo o arquivo.zip, lembre-se como o path não começa com / estamos trabalhando com o *path relativo. Isso significa que dentro da pasta do meu projeto existe o diretório pasta/subpasta *ex: C:\MeuProjetoJava\pasta\subpasta *No final ficará C:\MeuProjetoJava\pasta\subpasta\arquivo.zip */ Path dirZip = Paths.get("pasta/subpasta"); /*Dentro deste diretório estão todos os arquivos que queremos zipar. Vamos zipar todos os arquivos que estiverem * no diretório C:\MeuProjetoJava\pasta\subpasta\subsubpasta */ Path dirFiles = Paths.get("pasta/subpasta/subsubpasta"); /* O resolve vai juntar o primeiro path "pasta/subpasta" com o "arquivo.zip" * e utilizaremos a variável de referência zipFile para criar o arquivo.zip dentro do diretório pasta/subpasta. */ Path zipFile = dirZip.resolve("arquivo.zip"); // Ao ser executado esse try-with-resources vai criar o arquivo.zip imediatamente try (ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFile.toFile())); // Como vamos zipar todos os arquivos do diretório dirFiles apenas iteramos sobre eles usando DirectoryStream DirectoryStream<Path> stream = Files.newDirectoryStream(dirFiles)) { for (Path path : stream) { //Adicionamos ao arquivo.zip uma entrada ZipEntry, que será o arquivo que será copiado para dentro do zip zip.putNextEntry(new ZipEntry(path.getFileName().toString())); // O código abaixo copiará os dados do arquivo para o arquivo dentro do zip BufferedInputStream bf = new BufferedInputStream(new FileInputStream(path.toFile())); byte[] buff = new byte[2048]; int bytesRead; while ((bytesRead = bf.read(buff)) > 0) { zip.write(buff, 0, bytesRead); } zip.flush(); zip.closeEntry(); bf.close(); } } catch (IOException e) { e.printStackTrace(); } } } |
Espero que tenham gostado. Em breve um vídeo sobre esse código em nosso canal no YouTube. Se quiser aprender mais sobre Java, se liga nesse cursão porreta de java ;D
Nenhum comentário:
Postar um comentário