Java의 Zip 파일

Sheeraz Gul 2024년2월15일
  1. Java.Util.Zip을 사용하여 Java에서 단일 파일 압축
  2. Java.Util.Zip을 사용하여 Java에서 여러 파일 압축
  3. Java.Util.Zip을 사용하여 Java에서 폴더 압축
Java의 Zip 파일

zip 파일은 단일 파일, 여러 파일 또는 폴더로 구성될 수 있습니다. zip 파일을 만드는 방법에는 여러 가지가 있습니다.

이 자습서는 Java에서 zip 파일을 만드는 다양한 예를 보여줍니다.

Java.Util.Zip을 사용하여 Java에서 단일 파일 압축

java.util.zip.ZipOutputStream 클래스를 사용하여 Java에서 단일 파일을 압축할 수 있습니다. 아래 예를 참조하십시오.

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();
    }
  }
}

위의 코드는 delftstack1이라는 단일 파일로만 zip 파일을 생성합니다.

출력:

Zip File Created

단일 파일

Java.Util.Zip을 사용하여 Java에서 여러 파일 압축

마찬가지로 java.util.zip.ZipOutputStream을 사용하여 zip 파일에 여러 파일을 추가할 수 있습니다. zip 파일에 여러 파일이 하나씩 추가됩니다.

다음 예를 참조하십시오.

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();
      }
    }
  }
}

위의 코드는 zip 파일에 여러 파일을 추가합니다.

출력:

Zip File Created

여러 파일

Java.Util.Zip을 사용하여 Java에서 폴더 압축

Java.Util.Zip은 모든 하위 폴더 및 파일을 포함하여 폴더 또는 디렉토리를 압축할 수도 있습니다. 아래 예를 참조하십시오.

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;
        }
      });
    }
  }
}

위의 코드는 주어진 폴더를 압축합니다.

출력:

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

Zip 폴더

파일이나 폴더를 압축할 수 있는 파일 시스템 또는 zip4j와 같은 다른 방법도 있습니다. 그러나 Java.Util.Zip은 파일과 폴더를 압축하는 가장 효율적인 방법으로 간주됩니다.

작가: Sheeraz Gul
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

관련 문장 - Java File