Автор оригинала: 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-ввод-вывод
Рекомендации
- GZIPOutputStream javadoc в формате GZIPOutputStream
- Википедия – GZip
- сайт gzip
- GNU Gzip
- Gzip против Zip
- Java – Как распаковать файл GZIP
- Создать tar.gz на Яве
Оригинал: “https://mkyong.com/java/how-to-compress-a-file-in-gzip-format/”