مثال Java GZIP – ضغط وفك ضغط الملف

مرحبًا بك في مثال جافا لضغط الملفات بتقنية GZIP. تعتبر GZIP أحد الأدوات المفضلة لضغط الملفات في نظام Unix. يمكننا ضغط ملف واحد بتنسيق GZIP، ولكن لا يمكننا ضغط وأرشفة دليل باستخدام GZIP كما هو الحال في ملفات ZIP.

Java GZIP

فيما يلي برنامج مثالي بلغة جافا يوضح كيفية ضغط ملف إلى تنسيق GZIP ومن ثم فك ضغط ملف GZIP لإنشاء ملف جديد. GZIPExample.java

package com.journaldev.files;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZIPExample {

    public static void main(String[] args) {
        String file = "/Users/pankaj/sitemap.xml";
        String gzipFile = "/Users/pankaj/sitemap.xml.gz";
        String newFile = "/Users/pankaj/new_sitemap.xml";
        
        compressGzipFile(file, gzipFile);
        
        decompressGzipFile(gzipFile, newFile);
               
    }

    private static void decompressGzipFile(String gzipFile, String newFile) {
        try {
            FileInputStream fis = new FileInputStream(gzipFile);
            GZIPInputStream gis = new GZIPInputStream(fis);
            FileOutputStream fos = new FileOutputStream(newFile);
            byte[] buffer = new byte[1024];
            int len;
            while((len = gis.read(buffer)) != -1){
                fos.write(buffer, 0, len);
            }
            // أغلق الموارد
            fos.close();
            gis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

    private static void compressGzipFile(String file, String gzipFile) {
        try {
            FileInputStream fis = new FileInputStream(file);
            FileOutputStream fos = new FileOutputStream(gzipFile);
            GZIPOutputStream gzipOS = new GZIPOutputStream(fos);
            byte[] buffer = new byte[1024];
            int len;
            while((len=fis.read(buffer)) != -1){
                gzipOS.write(buffer, 0, len);
            }
            // أغلق الموارد
            gzipOS.close();
            fos.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

عند فك ضغط ملف GZIP وإذا لم يكن في تنسيق GZIP، سيتم رمي استثناء.

java.util.zip.ZipException: Not in GZIP format
	at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:164)
	at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:78)
	at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:90)
	at com.journaldev.files.GZIPExample.decompressGzipFile(GZIPExample.java:25)
	at com.journaldev.files.GZIPExample.main(GZIPExample.java:18)

هذا كل شيء بالنسبة لمثال جافا على GZIP.

Source:
https://www.digitalocean.com/community/tutorials/java-gzip-example-compress-decompress-file