Archivos comprimidos en Java

Sheeraz Gul 15 febrero 2024
  1. Use Java.Util.Zip para comprimir un solo archivo en Java
  2. Utilice Java.Util.Zip para comprimir varios archivos en Java
  3. Use Java.Util.Zip para comprimir una carpeta en Java
Archivos comprimidos en Java

Un archivo zip puede consistir en un solo archivo, varios archivos o incluso una carpeta. Hay diferentes formas de crear un archivo zip.

Este tutorial muestra diferentes ejemplos de cómo crear un archivo zip en Java.

Use Java.Util.Zip para comprimir un solo archivo en Java

Podemos usar la clase java.util.zip.ZipOutputStream para comprimir un solo archivo en Java. Vea el ejemplo a continuación:

package delftstack;

import java.io.*;
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;

public class Create_Zip {
  public static void main(String[] args) {
    Path Source_File =
        Paths.get("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\delftstack1.txt");
    String Output_Zip = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\NewZip.zip";

    try {
      Create_Zip.Create_Zip_File(Source_File, Output_Zip);
      System.out.println("Zip File Created");
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  // method to zip a single file
  public static void Create_Zip_File(Path Source_File, String Output_Zip) throws IOException {
    if (!Files.isRegularFile(Source_File)) {
      System.err.println("File Not Found.");
      return;
    }

    try (ZipOutputStream Zip_Output_Stream = new ZipOutputStream(new FileOutputStream(Output_Zip));
         FileInputStream File_Input_Stream = new FileInputStream(Source_File.toFile());) {
      ZipEntry Zip_Entry = new ZipEntry(Source_File.getFileName().toString());
      Zip_Output_Stream.putNextEntry(Zip_Entry);

      byte[] Buffer = new byte[1024];
      int Length;
      while ((Length = File_Input_Stream.read(Buffer)) > 0) {
        Zip_Output_Stream.write(Buffer, 0, Length);
      }
      Zip_Output_Stream.closeEntry();
    }
  }
}

El código anterior creará un archivo zip con el único archivo delftstack1.

Producción :

Zip File Created

Fila india

Utilice Java.Util.Zip para comprimir varios archivos en Java

De manera similar, podemos usar java.util.zip.ZipOutputStream para agregar varios archivos a un archivo zip. Se agregan varios archivos uno por uno al archivo zip.

Vea el siguiente ejemplo:

package delftstack;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Create_Zip {
  public static void main(String[] args) {
    try {
      // The Source file paths
      String Source_File1 = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\delftstack1.txt";
      String Source_File2 = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\\\delftstack2.txt";
      // Output Zipped file path
      String Output_Zip_Path = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\NewZip.zip";

      File Output_Zip = new File(Output_Zip_Path);
      FileOutputStream File_Output_Stream = new FileOutputStream(Output_Zip);
      ZipOutputStream Zip_Output_Stream = new ZipOutputStream(File_Output_Stream);

      Create_Zip_File(Source_File1, Zip_Output_Stream);
      Create_Zip_File(Source_File2, Zip_Output_Stream);
      Zip_Output_Stream.close();
      System.out.println("Zip File Created");
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  // Method to create the zip file
  private static void Create_Zip_File(String Source_File, ZipOutputStream Zip_Output_Stream)
      throws IOException {
    final int BUFFER = 1024;
    BufferedInputStream Buffered_Input_Stream = null;
    try {
      File file = new File(Source_File);
      FileInputStream File_Input_Stream = new FileInputStream(file);
      Buffered_Input_Stream = new BufferedInputStream(File_Input_Stream, BUFFER);

      ZipEntry Zip_Entry = new ZipEntry(file.getName());
      Zip_Output_Stream.putNextEntry(Zip_Entry);
      byte Data[] = new byte[BUFFER];
      int Length;
      while ((Length = Buffered_Input_Stream.read(Data, 0, BUFFER)) != -1) {
        Zip_Output_Stream.write(Data, 0, Length);
      }
      // close the entry
      Zip_Output_Stream.closeEntry();
    } finally {
      try {
        Buffered_Input_Stream.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

El código anterior agregará varios archivos a un archivo zip.

Producción :

Zip File Created

Múltiples archivos

Use Java.Util.Zip para comprimir una carpeta en Java

El Java.Util.Zip también puede comprimir una carpeta o directorio, incluidas todas las subcarpetas y archivos. Vea el ejemplo a continuación:

package delftstack;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Create_Zip {
  public static void main(String[] args) {
    Path Source_Folder = Paths.get("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\Folder");

    if (!Files.isDirectory(Source_Folder)) {
      System.out.println("Please provide the right folder.");
      return;
    }

    try {
      Create_Zip.Create_Zip_Folder(Source_Folder);
      System.out.println("Folder is zipped");
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  // zip a directory or folder
  public static void Create_Zip_Folder(Path Source_Folder) throws IOException {
    // get folder name as zip file name
    String Output_Zip = Source_Folder.getFileName().toString() + ".zip";

    try (
        ZipOutputStream Zip_Output_Stream = new ZipOutputStream(new FileOutputStream(Output_Zip))) {
      Files.walkFileTree(Source_Folder, new SimpleFileVisitor<>() {
        @Override
        public FileVisitResult visitFile(Path File, BasicFileAttributes File_Attributes) {
          // only copy files
          if (File_Attributes.isSymbolicLink()) {
            return FileVisitResult.CONTINUE;
          }

          try (FileInputStream File_Input_Stream = new FileInputStream(File.toFile())) {
            Path targetFile = Source_Folder.relativize(File);
            Zip_Output_Stream.putNextEntry(new ZipEntry(targetFile.toString()));

            byte[] BUFFER = new byte[1024];
            int Length;
            while ((Length = File_Input_Stream.read(BUFFER)) > 0) {
              Zip_Output_Stream.write(BUFFER, 0, Length);
            }

            Zip_Output_Stream.closeEntry();

            System.out.printf("Zipped file : %s%n", File);

          } catch (IOException e) {
            e.printStackTrace();
          }
          return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(Path File, IOException exception) {
          System.err.printf("Unable to zip the file : %s%n%s%n", File, exception);
          return FileVisitResult.CONTINUE;
        }
      });
    }
  }
}

El código anterior comprimirá la carpeta dada.

Producción :

Zipped file : C:\Users\Sheeraz\OneDrive\Desktop\ZipFiles\Folder\delftstack1.txt
Zipped file : C:\Users\Sheeraz\OneDrive\Desktop\ZipFiles\Folder\delftstack2.txt
Folder is zipped

Carpeta zip

También hay otras formas, como el sistema de archivos o zip4j, que pueden comprimir archivos o carpetas. Pero, el Java.Util.Zip se considera la forma más eficiente de comprimir archivos y carpetas.

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java File