مثال على فك ضغط ملف Java

مرحبًا بك في مثال فك ضغط ملف جافا. في المنشور السابق، تعلمنا كيفية ضغط الملف والدليل في جافا، وهنا سنقوم بفك ضغط نفس الملف المضغوط الذي تم إنشاؤه من الدليل إلى دليل إخراج آخر.

فك ضغط ملف جافا

لفك ضغط ملف مضغوط، نحتاج إلى قراءة الملف المضغوط باستخدام ZipInputStream ومن ثم قراءة جميع ZipEntry واحدًا تلو الآخر. ثم نستخدم FileOutputStream لكتابتها إلى نظام الملفات. كما نحتاج أيضًا إلى إنشاء دليل الإخراج إذا لم يكن موجودًا وأي دلائل فرعية موجودة في الملف المضغوط. فيما يلي برنامج فك ضغط ملف جافا الذي يقوم بفك ضغط الملف tmp.zip الذي تم إنشاؤه سابقًا إلى دليل الإخراج.

package com.journaldev.files;

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.ZipInputStream;

public class UnzipFiles {

    public static void main(String[] args) {
        String zipFilePath = "/Users/pankaj/tmp.zip";
        
        String destDir = "/Users/pankaj/output";
        
        unzip(zipFilePath, destDir);
    }

    private static void unzip(String zipFilePath, String destDir) {
        File dir = new File(destDir);
        // إنشاء دليل الإخراج إذا لم يكن موجودًا
        if(!dir.exists()) dir.mkdirs();
        FileInputStream fis;
        // مخزن لقراءة وكتابة البيانات إلى الملف
        byte[] buffer = new byte[1024];
        try {
            fis = new FileInputStream(zipFilePath);
            ZipInputStream zis = new ZipInputStream(fis);
            ZipEntry ze = zis.getNextEntry();
            while(ze != null){
                String fileName = ze.getName();
                File newFile = new File(destDir + File.separator + fileName);
                System.out.println("Unzipping to "+newFile.getAbsolutePath());
                // إنشاء دلائل للدلائل الفرعية في الملف المضغوط
                new File(newFile.getParent()).mkdirs();
                FileOutputStream fos = new FileOutputStream(newFile);
                int len;
                while ((len = zis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
                }
                fos.close();
                // إغلاق هذا ZipEntry
                zis.closeEntry();
                ze = zis.getNextEntry();
            }
            // إغلاق آخر ZipEntry
            zis.closeEntry();
            zis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

عند انتهاء البرنامج، لدينا جميع محتويات ملف الضغط في مجلد الإخراج بنفس تسلسل الدلائل. إليك ناتج البرنامج أعلاه:

Unzipping to /Users/pankaj/output/.DS_Store
Unzipping to /Users/pankaj/output/data/data.dat
Unzipping to /Users/pankaj/output/data/data.xml
Unzipping to /Users/pankaj/output/data/xmls/project.xml
Unzipping to /Users/pankaj/output/data/xmls/web.xml
Unzipping to /Users/pankaj/output/data.Xml
Unzipping to /Users/pankaj/output/DB.xml
Unzipping to /Users/pankaj/output/item.XML
Unzipping to /Users/pankaj/output/item.xsd
Unzipping to /Users/pankaj/output/ms/data.txt
Unzipping to /Users/pankaj/output/ms/project.doc

هذا كل شيء عن مثال فك ضغط ملف جافا.

Source:
https://www.digitalocean.com/community/tutorials/java-unzip-file-example