Рубрики
Без рубрики

Java – Сжатие файла в формате Gzip

В Java мы можем использовать “GZIPOutputStream” для сжатия файла в формате Gzip.

Автор оригинала: mkyong.

В этой статье показано, как использовать Java для сжатия файла в формате Gzip.

1. Что такое Gzip? GZip является стандартным инструментом сжатия файлов в системе Unix или Linux и обычно имеет суффикс .gz .

2. Зачем нам нужно сжимать файл в Gzip? Ответ: Меньший размер файла, экономия места на диске.

3. Как насчет tar.gz? Gzip сжимает один файл, а Tar собирает файлы в один архивный файл, посетите эту статью, чтобы Создать tar.gz на Яве

1. Сжать файл в Gzip–GZIPOutputStream

Мы копируем FileInputStream в GZIPOutputStream , чтобы сжать файл в формате Gzip.

1.1 Приведенный ниже пример сжимает файл sitemap.xml в файл Gzip sitemap.xml.gz .

package com.mkyong.io.howto.compress;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.zip.GZIPOutputStream;

public class GZipExample {

    public static void main(String[] args) {

        // compress a file
        Path source = Paths.get("/home/mkyong/test/sitemap.xml");
        Path target = Paths.get("/home/mkyong/test/sitemap.xml.gz");

        if (Files.notExists(source)) {
            System.err.printf("The path %s doesn't exist!", source);
            return;
        }

        try {

            GZipExample.compressGzip(source, target);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    // copy file (FileInputStream) to GZIPOutputStream
    public static void compressGzip(Path source, Path target) throws IOException {

        try (GZIPOutputStream gos = new GZIPOutputStream(
                                      new FileOutputStream(target.toFile()));
             FileInputStream fis = new FileInputStream(source.toFile())) {

            // copy file
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) > 0) {
                gos.write(buffer, 0, len);
            }

        }

    }

}

Вывод, XML-файл сжимается в формате Gzip, а размер файла уменьшается с 388 кб до 40 кб.

$ ls -lsah sitemap.*
388K -rw-rw-r-- 1 mkyong mkyong 388K Ogos 12 14:02 sitemap.xml
 40K -rw-rw-r-- 1 mkyong mkyong  40K Ogos 12 14:06 sitemap.xml.gz


$ gzip -l sitemap.xml.gz
       compressed        uncompressed  ratio uncompressed_name
            40154              396719  89.9% sitemap.xml              

1.2 Этот пример аналогичен примеру 1.1. Вместо этого мы используем NIO Files.copy для копирования Пути в GZIPOutputStream напрямую.

  public static void compressGzipNio(Path source, Path target) throws IOException {

      try (GZIPOutputStream gos = new GZIPOutputStream(
                                    new FileOutputStream(target.toFile()))) {

          Files.copy(source, gos);

      }

  }

2. Сжать строку в Gzip

2.1 В этом примере строка сжимается в файл Gzip.

  public static void compressStringToGzip(String data, Path target) throws IOException {

      try (GZIPOutputStream gos = new GZIPOutputStream(
                                    new FileOutputStream(target.toFile()))) {

          gos.write(data.getBytes(StandardCharsets.UTF_8));

      }

  }

Дальнейшее чтение Java – Как распаковать файл Gzip

Скачать Исходный Код

$клон git $клон git

$cd java-ввод-вывод

Рекомендации

Оригинал: “https://mkyong.com/java/how-to-compress-a-file-in-gzip-format/”