java, جاوا, فایل در جاوا

ساخت فایل زیپ در جاوا (Create Zip File)

ساخت فایل زیپ در جاوا

در این جلسه تیم کدگیت را با آموزش ساخت فایل زیپ در جاوا همراهی کنید. پیش نیاز این آموزش شامل موارد زیر است.

  1. آشنایی با خواندن و نوشتن فایل در جاوا
  2. آشنایی با آرایه

فایل زیپ (Zip File)

فرمت (Extension) فایل ZIP یک فرمت استاندارد فشرده سازی (Compressing) فایل است که داده‌ها (فایل‌ها، پوشه‌ها و…) را بدون هیچ گونه صدمه‌ای پس از فشرده سازی توسط الگوریتم‌های مخصوص، در خود نگه می‌دارد. این فرمت توسط شخص فلیپ والتر کَتز ( به انگلیسی: Phillip Walter Katz) و شرکت وی یعنی PKWARE توسعه یافته است. فرمت ZIP توسط اکثر سیستم‌عامل‌های موجود پشتیبانی می‌شود.

نکته: نسخه جدیدتر این فرمت فایل ZIPX نام دارد.

استفاده از این گونه آرشیوها (Archives) مزایای مختلفی دارد؛ از جمله آن که، شخص می‌تواند با فشرده سازی چندین فایل، تنها یک فایل آرشیو بدست آمده با این فرمت را انتقال دهد، یا شخص می‌تواند برای محافظت از داده‌های خود بر روی آن‌ها رمز عبور قرار دهد، یا با فشرده سازی فایل‌های خود فضای خالی حافظه جانبی (از جمله هارد دیسک‌ها، SSDها و…) خود را افزایش دهد و… .

فایل‌های ZIP دارای محدودیت‌هایی نیز هستند؛ از جمله آن که، حداقل حجم یک فایل ZIP (حتی بدون داشتن هیچ‌گونه داده‌ فشرده شده) 22 بایت و حداکثر حجم آن در فرمت ZIP استاندارد (حالت رایج فایل‌های ZIP) برابر 4 گیگابایت است. البته می‌توان با تبدیل کردن یک فایل ZIP به بخش‌های چندگانه محدودیت حداکثر را از بین برد. به این صورت که تعدادی بخش‌ (Part) به هم پیوسته (که البته این بخش‌ها دارای محدودیت هستند) را در کنار هم قرار داد که بستگی به اندازه داده‌های فشرده سازی شده و معین کردن حجم آن‌ها از طرف کاربر، تعداد آن‌ها نیز متغیر است(bytegate.ir/).

کد ساخت فایل زیپ در جاوا

برای ساخت فایل زیپ در جاوا ما از کتابخانه File و ZipOutputStream استفاده میکنیم. این کلاس ها در جاوا موجود است و فقط نیاز به import ساده دارید. به طور خلاصه باید مراحل زیر را برای ساخت فایل زیپ در جاوا انجام دهید:

  1. یک FileOutputStream بسازید برای نوشتن در فایلها(منظور ایجاد فایلها است).
  2. یک ZipOutputStream بسازید برای نوشتن در فایل zip.
  3. برای تک تک فایل هایی که میخواهیم درون زیپ قرار گیرد FileInputeStram میسازیم.
  4. برای تک تک فایل هایی که میخواهیم درون زیپ قرار گیرد Zip entry میسازیم تا یک فایل جدید در zip فایل ایجاد شود.
  5. داده های تک تک فایل ها را خوانده و درون زیپ فایل میریزیم.

کد فایل زیپ به صورت زیر است:

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

public class ZipTest {

            public static void main(String[] args) {
                        String zipFile = "archive.zip";
                        String[] srcFiles = { "graph.txt", "graph2.txt"};

                        try {

                                    // create byte buffer

                                    byte[] buffer = new byte[1024];

                                    FileOutputStream fos = new FileOutputStream(zipFile);

                                    ZipOutputStream zos = new ZipOutputStream(fos);

                                    for (int i = 0; i < srcFiles.length; i++) {

                                                File srcFile = new File(srcFiles[i]);

                                                FileInputStream fis = new FileInputStream(srcFile);

                                                // begin writing a new ZIP entry, positions the stream to the
                                                // start of the entry data

                                                zos.putNextEntry(new ZipEntry(srcFile.getName()));

                                                int length;

                                                while ((length = fis.read(buffer)) > 0) {

                                                            zos.write(buffer, 0, length);

                                                }

                                                zos.closeEntry();

                                                // close the InputStream

                                                fis.close();

                                    }

                                    // close the ZipOutputStream

                                    zos.close();

                        }

                        catch (IOException ioe) {

                                    System.out.println("Error creating zip file: " + ioe);

                        }

            }

}

همانطور که میبینید در کد فایل زیپ در جاوا یک آرایه از فایل هایی که میخواهیم در زیپ قرار گیرد ساختیم به نام srcFiles سپس طبق مطالب گفته شده zipoutputstream و fileoutputstream ایجاد کردیم. سپس یک حلقه به تعداد فایل ها نوشتیم یک به یک فایل ها را خواندیم و یک zipentry جدید برای هر یک ساختیم. در آخر نیز فایل خوانده شده را write کردیم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *