Hoje vou mostrar como descompactar um arquivo Zip no Java. Vamos pegar o código abaixo:
01. public static void unzip(String file, String destiny) throws IOException{
02. byte[] buffer = new byte[1024];
03. File folder = new File(destiny);
04. if(!folder.exists()){
05. folder.mkdir();
06. }
07. try (ZipInputStream zis = new ZipInputStream(new FileInputStream(file))) {
08. ZipEntry ze = zis.getNextEntry();
09. while(ze!=null){
10. String fileName = ze.getName();
11. if(ze.isDirectory()){
12. new File(destiny+fileName).mkdirs();
13. System.out.println(destiny+fileName+" created.");
14. }else{
15. File newFile = new File(destiny + File.separator + fileName);
16. new File(newFile.getParent()).mkdirs();
17. System.out.println(destiny+fileName+" is being unzipped.");
18. try (FileOutputStream fos = new FileOutputStream(newFile)) {
19. int len;
20. while ((len = zis.read(buffer)) > 0) {
21. fos.write(buffer, 0, len);
22. }
}
23. System.out.println(destiny+fileName+" is unzipped.");
24. }
25. ze = zis.getNextEntry();
26. }
27. System.out.println("All files are unzipped.");
28. zis.closeEntry();
29. }
30. }
Esta é um método que criei para descompactar um arquivo zip. Como parâmetro ele recebe o arquivo zip que vai ser descompactado (String file) e a pasta onde ele será descompactado (String destiny).
Na linha 02, nós vamos temos o buffer para onde os dados dos arquivos vão ser temporáriamente transportados e na linha 03, temos o arquivo que vai indicar a pasta de destino. Na linha 04, nós verificamos se a pasta de destino já existe e caso não exista, nós criamos ela.
Na linha 07 é onde começamos o processo de descompactação: criamos um FileInputStream com o caminho do arquivo zip como parâmetro para podermos lê-lo e um ZipInputStream para podermos decompactá-lo.
Na linha 08, nós vamos pegar o primeiro arquivo dentro do arquivo zip e a partir da linha 09, vamos fazer o processo em si. Primeiro verificamos se o registro é uma pasta ou um arquivo (linha 11). Se for uma pasta, nós simplesmente criamos ela. Caso seja um arquivo (linha 14), nós criaremos um objeto File para o arquivo que vai ser descompactado, criamos as pastas caso na qual ele será descompactado caso não exista e com um FileOutputStream, vamos escrever este arquivo. O laço da linha 20 vai lendo os arquivos pelo tamanho do buffer em bytes por vez, e uma vez que todos os bytes foram lidos, o loop se encerra. Ao terminar, pegamos o próximo arquivo (linha 25) e o processo se repete até não ter mais arquivos.
Então finalmentes, fechamos o arquivo zip (linha 28) e encerramos nosso processo.
por padrão salva em qual diretorio?
ResponderExcluir