Java에서 파일을 압축하고 압축하는 방법

개요

이 기사에서는 Java API 및 샘플 코드를 사용하는 다양한 방법을 사용하여 Zip 파일을 프로그래밍 방식으로 압축하는 방법을 알려줍니다. 하나 이상의 파일을 지퍼 또는 압축하는 방법과 파일을 동시에 지퍼하는 방법을 배웁니다. 또한 파일을 압축하거나 압축 해제하는 방법도 배웁니다.

Java의 파일 지퍼 또는 압축 및 Java에서 파일을 압축 해제 또는 압축 해제합니다.

ASPOSE.zip API를 사용하면 기본 파일 구조에 대해 걱정하지 않고 파일을 압축하고 압축 해제 할 수 있습니다. 이 기사는 단일 및 다중 파일 압축 작업을 보여줍니다.

파일 압축

단일 파일 압축

<a name = “Java-compressing-single-file"id = “Java-compressing-single-file”> 단계 : Java에서 단일 파일 압축

  1. 출력 zip 파일의 원하는 이름으로 파일 출력 스트림을 만듭니다.
  2. 압축 할 데이터 파일의 파일 입력 스트림을 만듭니다.
  3. Archive 클래스의 인스턴스를 작성하고 ArchiveEntrySettings 클래스의 인스턴스를 전달합니다.
  4. Archive.CreateEntry 메소드를 사용하여 2 단계에서 생성 된 데이터 파일을 추가합니다.
  5. Archive.Save 메소드를 사용하여 데이터 파일을 우편으로하고 1 단계에서 생성 된 파일 스트림을 전달합니다.
 1try (fileoutputStream ZipFile =  FileOutputStream (DatAdir + "CompressSingleFile_out.zip")) {
 2    // 아카이브에 추가 할 파일
 3    try (fileInputStream source1 = new FileInputStream (datAdir + "alice29.txt")) {
 4        Try (Archive Archive = New Archive (New ArchiveEntrySettings ())) {
 5            archive.createentry ( "alice29.txt", source1);
 6            Archive.save (zipfile);
 7        }
 8    }
 9} catch (ioException ex) {
10    System.out.println (예);
11}

여러 파일 압축

<a name = “Java-compressing-multiple-files"id = “Java-compressing-multiple-files”> 단계 : Java에서 여러 파일을 압축하는

  1. 출력 zip 파일의 원하는 이름으로 파일 스트림을 만듭니다.
  2. 압축 할 첫 번째 데이터 파일의 파일 스트림을 만듭니다.
  3. 압축 할 두 번째 데이터 파일의 파일 스트림을 만듭니다.
  4. Archive 클래스의 인스턴스를 만듭니다. 5.
  5. ArchivesAveOptions 클래스의 인스턴스를 만듭니다.
  6. Archive.Save 메소드를 사용하여 데이터 파일을 우편으로 전달하고 1 단계에서 생성 된 파일 스트림과 위의 단계에서 생성 된 ArchivesAveOptions의 인스턴스를 전달합니다.
 1try (fileoutputStream ZipFile =  FileOutputStream (DatAdir + "CompressSingleFile_out.zip")) {
 2    try (fileInputStream source1 = new FileInputStream (datAdir + "alice29.txt")) {
 3        try (fileInputStream source2 = new FileInputStream (datAdir + "asyoulik.txt")) {
 4            Try (Archive Archive = New Archive (New ArchiveEntrySettings ())) {
 5                archive.createentry ( "alice29.txt", source1);
 6                archive.createentry ( "asyoulik.txt", source2);
 7                ArchivesAveOptions 옵션 =  아카이브 aveOptions ();
 8                옵션 .setencoding (Standardcharsets.us_ascii);
 9                옵션 .setArchiveComment ( "캔터베리 코퍼스의 두 시가 있습니다");
10                Archive.save (zipfile, 옵션);
11            }
12        }
13    }
14} catch (ioException ex) {
15    System.out.println (예);
16}

파일 정보로 파일 압축

<a name = “java-compress-files- file-info"id = “java-compress-files by-file-info”> 단계 : Java의 파일 정보로 파일을 압축합니다

  1. 출력 zip 파일의 원하는 이름으로 파일 출력 스트림을 엽니 다.
  2. 압축 할 첫 번째 데이터 파일의 파일 개체를 만듭니다.
  3. 압축 할 두 번째 데이터 파일의 개체 파일 생성.
  4. Archive 클래스의 인스턴스를 만듭니다.
  5. Archive.CreateEntry 메소드를 사용하여 2 단계와 3 단계에서 생성 된 데이터 파일을 추가합니다.
  6. ArchivesAveOptions 클래스의 인스턴스를 만듭니다.
  7. Archive.Save 메소드를 사용하여 데이터 파일을 우편으로 전달하고 1 단계에서 생성 된 파일 스트림과 ArchivesAveOptions의 인스턴스를 위의 단계에서 생성합니다.
 1try (fileoutputStream ZipFile =  FileOutputStream (datAdir + "compressFilesByFileInfo_out.zip")) {
 2    file fi1 =  파일 (datadir + "alice29.txt");
 3    file fi2 =  파일 (datadir + "fields.c");
 4    try (Archive Archive = new Archive ()) {
 5        archive.createentry ( "alice29.txt", fi1);
 6        archive.createentry ( "fields.c", fi2);
 7        ArchivesAveOptions 옵션 =  아카이브 aveOptions ();
 8        옵션 .setencoding (Standardcharsets.us_ascii);
 9        Archive.save (zipfile, 옵션);
10    }
11} catch (ioexception 무시) {
12    System.out.println (예);
13}

압축없이 아카이브에 파일 저장

<a name = “a name =“java stording-files-toarchives without-compression “id =“java storing-files-files-without-compression “> 단계 : java를 사용하여 압축없이 파일을 저장

  1. 출력 zip 파일의 원하는 이름으로 파일 출력 스트림을 엽니 다.
  2. 데이터 파일을 아카이브에 저장할 수 있도록 파일 개체를 만듭니다.
  3. ArchiveEntrySettings 클래스의 인스턴스를 작성하고 StoreCompressionSettings 클래스의 인스턴스를 전달합니다.
  4. Archive 클래스의 인스턴스를 작성하고 위의 단계에서 생성 된 ArchiveEntrySettings 클래스의 인스턴스를 전달합니다.
  5. 추가 파일 Archive.CreateEntry 메소드를 사용하여 2 단계에서 생성 된 개체.
  6. ArchivesAveOptions의 인스턴스를 작성하고 ArchivesAveOptions.setEncoding 메소드를 사용하여 Standardcharsets.us_ascii로 인코딩을 설정합니다.
  7. Archive.Save 메소드를 사용하여 데이터 파일을 우편으로 전달하고 1 단계에서 생성 된 파일 스트림과 ArchivesAveOptions의 인스턴스를 위의 단계에서 생성합니다.
 1try (fileoutputStream ZipFile =  FileOutputStream (datAdir + "storeMultipleFileswithOutcompression_out.zip")) {
 2    file fi1 =  파일 (datadir + "alice29.txt");
 3    file fi2 =  파일 (datadir + "fields.c");
 4    Try (Archive Archive = New Archive (New ArchiveEntrySettings (New StoreCompressionSettings ())) {
 5        archive.createentry ( "alice29.txt", fi1);
 6        archive.createentry ( "fields.c", fi2);
 7        ArchivesAveOptions 옵션 =  아카이브 aveOptions ();
 8        옵션 .setencoding (Standardcharsets.us_ascii);
 9        Archive.save (zipfile, 옵션);
10    }
11} catch (ioexception 무시) {
12    System.out.println (예);
13}

병렬 처리를 사용하여 파일 압축

<a name = “Java-using-Parallelism-to-Compress-Files"id = “Java-using-Parallelism-to-Compress-Files”> 단계 :

  1. 출력 zip 파일의 원하는 이름으로 파일 출력 스트림을 엽니 다.
  2. 첫 번째 및 두 번째 데이터 파일을 압축 할 파일 입력 스트림을 엽니 다.
  3. Archive 클래스 인스턴스를 만듭니다.
  4. Archive.CreateEntry 메소드를 사용하여 2 단계에서 생성 된 데이터 파일을 추가합니다.
  5. ParallelOptions의 인스턴스를 작성하고 parallictions.setparallelcpressinmemory 메소드를 사용하여 parally compressionMode.Always를 설정하십시오.
  6. ArchivesAveOptions의 인스턴스를 작성하고 archivesAveOptions.setParalLelOptions 메소드를 사용하여 위의 인스턴스와 병렬 옵션을 설정하십시오.
  7. Archive.Save 메소드를 사용하여 데이터 파일을 우편으로 전달하고 1 단계에서 생성 된 파일 스트림과 ArchivesAveOptions의 인스턴스를 위의 단계에서 생성합니다.
 1try (fileoutputStream ZipFile =  FileOutputStream (datAdir + "usingparallelismtocompressfiles_out.zip")) {
 2    try (fileInputStream source1 = new FileInputStream (datAdir + "alice29.txt")) {
 3        try (fileInputStream source2 = new FileInputStream (datAdir + "asyoulik.txt")) {
 4            Try (Archive Archive = New Archive (New ArchiveEntrySettings ())) {
 5                archive.createentry ( "alice29.txt", source1);
 6                archive.createentry ( "asyoulik.txt", source2);
 7                병렬  espaleptions = new Parallictions ();
 8                parallelOptions.setparallelcompressinmemory (parallel compressionMode.Always);
 9                ArchivesAveOptions 옵션 =  아카이브 aveOptions ();
10                옵션 .setparalleloptions (병렬 탑);
11                옵션 .setencoding (Standardcharsets.us_ascii);
12                옵션 .setArchiveComment ( "캔터베리 코퍼스의 두 시가 있습니다");
13                Archive.save (zipfile, 옵션);
14            }
15        }
16    }
17} catch (ioException ex) {
18    System.out.println (예);
19}

Zip Archive 내의 LZMA 압축

Lempel – Ziv – Markov 체인 알고리즘 (lzma)는 무손실 데이터 압축을 수행하는 데 사용되는 알고리즘입니다. LZMA는 사전 압축 알고리즘을 사용하며 압축 스트림은 비트 스트림입니다. Zip 아카이브 내의 LZMA 압축을 통해 Zip 컨테이너는 LZMA 압축 항목을 포함 할 수 있습니다. 다음 코드 예제는 aspose.zip api를 사용하여 LZMA 압축의 구현을 보여줍니다.

<a name = “java-lzma-compression-within-zip-archive"id = “java-lzma-compression-within-zip-archive”> 단계 : lzma 압축 java

  1. 출력 zip 파일의 원하는 이름으로 파일 출력 스트림을 엽니 다.
  2. ArchiveEntrySettings 클래스의 인스턴스를 작성하고 lzmacompressionsettings 클래스의 인스턴스를 전달합니다.
  3. Archive 클래스의 인스턴스를 만들고 위에서 만든 archiveentrysettings의 인스턴스를 전달하십시오.
  4. archive.createentry 메소드를 사용하여 파일 경로를 통해 압축 할 데이터 파일을 추가하십시오.
  5. Archive.Save 메소드를 사용하여 데이터 파일을 우편으로 지정합니다.
1try (fileoutputStream ZipFile =  FileOutputStream (DatAdir + "lzmacompression_out.zip")) {
2    try (Archive Archive = New Archive (New ArchiveEntrySettings (new lzmacompressionSettings ())) {
3        archive.createentry ( "sample.txt", datadir + "sample.txt");
4        Archive.save (zipfile);
5    }
6} catch (ioexception 무시) {
7    System.out.println (예);
8}

Zip Archive 내에서 bzip2 압축

BZIP2 압축 설정을 통해 지퍼 컨테이너는 BZIP2 압축 항목을 포함 할 수 있습니다. 다음 코드 예제는 Aspose.zip API를 사용하여 BZIP2 압축의 구현을 보여줍니다.

<a name = “java-bzip2-compression-within-zip-archive"id = “java-bzip2-compression-within-zip-archive”> 단계 : bzip2 java

  1. 출력 zip 파일의 원하는 이름으로 파일 출력 스트림을 엽니 다.
  2. ArchiveEntrySettings 클래스의 인스턴스를 작성하고 bzip2compressionsettings 클래스의 IT 인스턴스를 전달합니다.
  3. Archive 클래스의 인스턴스를 작성하고 위에서 만든 archiveentrysettings의 인스턴스를 전달하십시오.
  4. archive.createentry 메소드를 사용하여 파일 경로를 통해 압축 할 데이터 파일을 추가하십시오.
  5. Archive.Save 메소드를 사용하여 데이터 파일을 우편으로 지정합니다.
1try (fileoutputStream ZipFile =  FileOutputStream (datAdir + "bzip2compression_out.zip")) {
2    Try (Archive Archive = New Archive (New ArchiveEntrySettings (New BZIP2CompressionSettings ())) {
3        archive.createentry ( "sample.txt", datadir + "sample.txt");
4        Archive.save (zipfile);
5    }
6} catch (ioexception 무시) {
7    System.out.println (예);
8}

감압 아카이브

단일 파일을 갖는 아카이브를 압축 압력을 가하는 것

 1try (fileInputStream fs = new FileInputStream (DatAdir + "CompressSingleFile_out.zip")) {
 2    try (아카이브 아카이브 = 새로운 아카이브 (fs)) {
 3        int [] % 준비 = new int [] {0};
 4        archive.getentries (). get (0) .setextractionProgressed (새 이벤트 <ProgroseEventArgs> () {
 5            @보수
 6            Public Void Invoke (Object Sender, ProgressEventArgs ProgressEventArgs) {
 7                int 백분율 = (int) ((100 * progressEventArgs.getProceedEdBytes ())
 8                        / ((ArchiveEntry) sender) .getUncompressedSize ());
 9                if (퍼센트> 퍼센트 레디 [0])
10                {
11                    System.out.println (% + "% 압축 압축");
12                    퍼지 준비 [0] = %;
13                }
14            }
15        });
16        archive.getentries (). get (0) .extract (datadir + "alice_extracted_out.txt");
17    }
18} catch (ioException ex) {
19    System.out.println (예);
20}

여러 파일이있는 아카이브를 압축 압력을 가하는 것

 1try (fileInputStream fs = new FileInputStream (datAdir + "compressmultiplefiles_out.zip")) {
 2    StringBuilder sb = new StringBuilder ( "항목은 :");
 3    int [] % 준비 = new int [] {0};
 4    archiveloadoptions 옵션 = 새로운 archiveloadoptions ();
 5    옵션.
 6        @보수
 7        public void invoke (Object Sender, EntryEventArgs EntryEventArgs) {
 8            sb.Append (elenteEventArgs.getEntry (). getName ()). Append ( ",");
 9        }
10    });
11    옵션.
12        @보수
13        Public Void Invoke (Object Sender, ProgressEventArgs ProgressEventArgs) {
14            int 백분율 = (int) ((100 * progressEventArgs.getProceedEdBytes ())
15                    / ((ArchiveEntry) sender) .getUncompressedSize ());
16            if (퍼센트> 퍼센트 레디 [0])
17            {
18                System.out.println (% + "% 압축");
19                퍼지 준비 [0] = %;
20            }
21        }
22    });
23    try (아카이브 아카이브 = 새로운 아카이브 (fs, 옵션)) {
24        System.out.println (sb.substring (0, sb.length () -2));
25        try (fileoutputStream 추출 =  FileOutputStream (datAdir + "alice_extracted_out.txt")) {
26            try (inputstream defompressed = archive.getentries (). get (0) .open ()) {
27                바이트 [] 버퍼 = 새로운 바이트 [8192];
28                int bytesread;
29                while (0 <(bytesread = decompressed.read (buffer, 0, buffer.length))) {
30                    extracted.write (Buffer, 0, BytesRead);
31                }
32                // 감압 된 스트림에서 파일 추출까지 읽습니다.
33            }
34        }
35        퍼지 준비 [0] = 0;
36        archive.getentries (). get (1) .extract (datadir + "asyoulik_extracted_out.txt");
37    }
38} catch (ioException ex) {
39    System.out.println (예);
40}

압축없이 저장된 아카이브 추출

 1try (fileInputStream ZipFile = new FileInputStream (DatAdir + "StoreMultipleFileswithOutcompression_out.zip")) {
 2    시도 (아카이브 아카이브 =  아카이브 (zipfile)) {
 3        try (fileoutputStream 추출 =  FileOutputStream (datAdir + "alice_extracted_store_out.txt")) {
 4            try (inputStream 저장 = Archive.getEntries (). get (0) .open ()) {
 5                바이트 [] 버퍼 = 새로운 바이트 [8192];
 6                int bytesread;
 7                while (0 <(bytesRead = 저장.
 8                    extracted.write (Buffer, 0, BytesRead);
 9                }
10                // 저장된 스트림에서 파일 추출까지 읽습니다.
11            }
12        }
13        try (fileoutputStream 추출 =  FileOutputStream (datAdir + "asyoulik_extracted_store_out.txt")) {
14            try (inputStream 저장 = Archive.getEntries (). get (1) .open ()) {
15                바이트 [] 버퍼 = 새로운 바이트 [8192];
16                int bytesread;
17                while (0 <(bytesRead = 저장.
18                    extracted.write (Buffer, 0, BytesRead);
19                }
20                // 저장된 스트림에서 파일 추출까지 읽습니다.
21            }
22        }
23    }
24} catch (ioException ex) {
25    System.out.println (예);
26}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.