Trabalho com ZIP/arquivos em Kotlin: ZIP-InputStream e ZipFile

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com arquivos ZIP em Kotlin: guia completo

No desenvolvimento moderno em Kotlin (JVM), muitas vezes surge a necessidade de compactar ou descompactar arquivos. A biblioteca padrão do Java fornece ferramentas poderosas para trabalhar com o formato ZIP através do pacote java.util.zip. Neste artigo, abordaremos detalhadamente como criar, ler e modificar arquivos ZIP usando Kotlin e os recursos integrados da JVM.



Classes principais para trabalhar com ZIP

Para trabalhar com arquivos ZIP em Kotlin, são utilizadas as seguintes classes do java.util.zip:

  • ZipOutputStream — para criar novos arquivos ZIP e adicionar arquivos a eles.
  • ZipInputStream — para ler sequencialmente o conteúdo do arquivo (modo de fluxo).
  • ZipFile — para acesso aleatório às entradas do arquivo.
  • ZipEntry — representa uma entrada individual (arquivo ou diretório) dentro do arquivo.

Todas essas classes fazem parte da biblioteca padrão do JDK, portanto, nenhuma dependência adicional é necessária.



Criação de um arquivo ZIP

Para criar um arquivo, utiliza-se ZipOutputStream, que envolve um FileOutputStream. Cada arquivo é adicionado através de um ZipEntry.

import java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.util.zip.ZipEntryimport java.util.zip.ZipOutputStream

fun createZipArchive(sourceDir: String, zipFilePath: String) { val dir = File(sourceDir) val files = dir.listFiles() ?: return ZipOutputStream(FileOutputStream(zipFilePath)).use { zos -> for (file in files) { if (file.isFile) { // Cria uma entrada com o nome do arquivo val entry = ZipEntry(file.name) zos.putNextEntry(entry) // Copia o conteúdo do arquivo FileInputStream(file).use { fis -> fis.copyTo(zos) } zos.closeEntry() } } } println("Arquivo criado: $zipFilePath")}

// Exemplo de chamadafun main() { createZipArchive("/caminho/para/origem", "/caminho/para/arquivo.zip")}


Extração de um arquivo ZIP

A extração é realizada através de ZipInputStream. Lemos cada entrada e restauramos os arquivos no disco.

import java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.util.zip.ZipInputStream

fun extractZipArchive(zipFilePath: String, outputDir: String) { val outputFolder = File(outputDir).also { it.mkdirs() } ZipInputStream(FileInputStream(zipFilePath)).use { zis -> var entry = zis.nextEntry while (entry != null) { val fileName = entry.name val outputFile = File(outputFolder, fileName) // Cria diretórios pai, se necessário outputFile.parentFile?.mkdirs() // Extrai apenas arquivos (não diretórios) if (!entry.isDirectory) { FileOutputStream(outputFile).use { fos -> zis.copyTo(fos) } } entry = zis.nextEntry } } println("Arquivo extraído em: $outputDir")}

// Exemplo de chamadafun main() { extractZipArchive("/caminho/para/arquivo.zip", "/caminho/para/extrair")}


Leitura do conteúdo do arquivo sem extração

Para visualizar os arquivos dentro do ZIP sem extraí-los, utilize ZipFile e itere sobre entries().

import java.io.Fileimport java.util.zip.ZipFile

fun listZipContents(zipFilePath: String) { ZipFile(File(zipFilePath)).use { zipFile -> println("Conteúdo do arquivo: ${zipFile.name}") println("Total de entradas: ${

Recommendations