Skill

Tar ফাইল এবং Java তে তার ব্যবস্থাপনা

জাভা জিপ (Java Zip) - Java Technologies

268

Tar (Tape Archive) একটি জনপ্রিয় আর্কাইভ ফাইল ফরম্যাট যা মূলত Unix এবং Linux সিস্টেমে ব্যবহৃত হয়। এটি মূলত একাধিক ফাইল এবং ডিরেক্টরি সংকলন করার জন্য ব্যবহৃত হয়। যদিও ZIP ফাইল কমপ্রেসড ফরম্যাট হিসেবে কাজ করে, Tar ফাইল মূলত একটি আর্কাইভ ফাইল যা শুধুমাত্র ফাইলগুলো সংরক্ষণ করতে ব্যবহৃত হয় এবং ফাইলগুলোকে কম্প্রেস করার জন্য এটি অন্য টুলের সঙ্গে যুক্ত হতে পারে (যেমন gzip বা bzip2).

Java তে Tar ফাইল ব্যবস্থাপনা করার জন্য Java SE এ সরাসরি java.util.zip API নেই, তবে বিভিন্ন তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে আপনি Tar ফাইল তৈরি, এক্সট্র্যাক্ট, এবং ম্যানিপুলেট করতে পারেন। সবচেয়ে জনপ্রিয় লাইব্রেরিগুলোর মধ্যে Apache Commons Compress লাইব্রেরি ব্যবহার করা হয়।

১. Tar ফাইল কী?

Tar ফাইল সাধারণত একটি আর্কাইভ ফাইল যা একাধিক ফাইল এবং ডিরেক্টরি একত্রিত করে সংরক্ষণ করে। এটি মূলত একটি আর্কাইভিং ফরম্যাট, যা কম্প্রেশন ছাড়া ফাইলের একত্রিত সংরক্ষণ এবং তাদের স্টোরেজ সুবিধা প্রদান করে।

  • Tar ফাইল কেবলমাত্র একটি আর্কাইভিং ফরম্যাট; এটি ফাইলগুলিকে একত্রিত করে, তবে কম্প্রেস করে না। এটি সাধারণত gzip (tar.gz) বা bzip2 (tar.bz2) এর সাথে ব্যবহৃত হয় যাতে ফাইলগুলো কম্প্রেস করা যায়।
  • Tar ফাইল মূলত Unix এবং Linux সিস্টেমে ব্যবহৃত হয়, তবে Windows সিস্টেমেও ব্যবহার করা যায়।

২. Java তে Tar ফাইল ম্যানেজমেন্ট:

Java SE এ সরাসরি Tar ফাইলের জন্য কোনও ক্লাস নেই, তবে আপনি Apache Commons Compress লাইব্রেরি ব্যবহার করে Tar ফাইল তৈরি এবং এক্সট্র্যাক্ট করতে পারেন।

২.১ Apache Commons Compress লাইব্রেরি ব্যবহার করা

Apache Commons Compress একটি ওপেন সোর্স Java লাইব্রেরি যা কম্প্রেশন এবং আর্কাইভ ফাইল ফরম্যাট সমর্থন করে, যেমন tar, zip, gzip, bzip2 ইত্যাদি। এই লাইব্রেরি দিয়ে আপনি সহজেই Tar ফাইল তৈরি ও এক্সট্র্যাক্ট করতে পারবেন।

২.২ Tar ফাইল তৈরি করা (Tar Archiving)

Tar ফাইল তৈরি করতে প্রথমে Apache Commons Compress লাইব্রেরি আপনার প্রজেক্টে অন্তর্ভুক্ত করতে হবে।

Maven Dependency:
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>
Tar ফাইল তৈরি করার উদাহরণ:
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;

import java.io.*;
import java.util.zip.GZIPOutputStream;

public class TarExample {
    public static void main(String[] args) {
        String tarFile = "example.tar.gz"; // Output tar.gz ফাইলের নাম
        String[] filesToAdd = {"file1.txt", "file2.txt"}; // ফাইলগুলো যা টার ফাইলে যোগ করতে হবে

        try {
            // Output stream তৈরি করা
            FileOutputStream fos = new FileOutputStream(tarFile);
            GzipCompressorOutputStream gzipOut = new GzipCompressorOutputStream(fos);
            TarArchiveOutputStream tarOut = new TarArchiveOutputStream(gzipOut);

            // ফাইলগুলো টার ফাইলে অ্যাড করা
            for (String fileName : filesToAdd) {
                File file = new File(fileName);
                FileInputStream fis = new FileInputStream(file);
                TarArchiveEntry entry = new TarArchiveEntry(file, file.getName());
                tarOut.putArchiveEntry(entry);
                byte[] buffer = new byte[1024];
                int length;
                while ((length = fis.read(buffer)) >= 0) {
                    tarOut.write(buffer, 0, length);
                }
                tarOut.closeArchiveEntry();
                fis.close();
            }

            // Output stream বন্ধ করা
            tarOut.finish();
            tarOut.close();
            gzipOut.close();
            fos.close();

            System.out.println("Tar ফাইল সফলভাবে তৈরি হয়েছে!");

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

ব্যাখ্যা:

  • TarArchiveOutputStream ব্যবহার করে একটি Tar ফাইল তৈরি করা হয়েছে।
  • GzipCompressorOutputStream ব্যবহার করে Tar ফাইলটিকে gzip কম্প্রেশন করা হয়েছে (.tar.gz)।
  • TarArchiveEntry ক্লাস ব্যবহার করে Tar ফাইলে ফাইল যোগ করা হয়েছে।
  • ফাইলগুলি একে একে Tar ফাইলে লেখা হয়েছে এবং শেষে আর্কাইভ বন্ধ করা হয়েছে।

২.৩ Tar ফাইল থেকে ডেটা এক্সট্র্যাক্ট (Tar Extraction)

Tar ফাইল এক্সট্র্যাক্ট করার উদাহরণ:
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;

import java.io.*;

public class TarExtractExample {
    public static void main(String[] args) {
        String tarFile = "example.tar.gz"; // Input tar.gz ফাইলের নাম
        String outputDir = "extracted/"; // Extraction এর জন্য output ডিরেক্টরি

        try {
            // Tar ফাইল পড়ার জন্য ইনপুট স্ট্রিম তৈরি করা
            FileInputStream fis = new FileInputStream(tarFile);
            GzipCompressorInputStream gzipIn = new GzipCompressorInputStream(fis);
            TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn);

            TarArchiveEntry entry;
            // প্রতিটি এন্ট্রি পড়া এবং এক্সট্র্যাক্ট করা
            while ((entry = tarIn.getNextTarEntry()) != null) {
                File outputFile = new File(outputDir + entry.getName());
                outputFile.getParentFile().mkdirs(); // ডিরেক্টরি তৈরি করা
                FileOutputStream fos = new FileOutputStream(outputFile);

                // ফাইলের ডেটা লেখা
                byte[] buffer = new byte[1024];
                int length;
                while ((length = tarIn.read(buffer)) >= 0) {
                    fos.write(buffer, 0, length);
                }

                fos.close();
            }

            tarIn.close();
            gzipIn.close();
            fis.close();

            System.out.println("Tar ফাইল সফলভাবে এক্সট্র্যাক্ট হয়েছে!");

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

ব্যাখ্যা:

  • TarArchiveInputStream ব্যবহার করে Tar ফাইল থেকে ডেটা পড়া হয়েছে।
  • GzipCompressorInputStream ব্যবহার করে gzip কম্প্রেশন解压 করা হয়েছে।
  • প্রতিটি ফাইল এক্সট্র্যাক্ট করার পরে সংশ্লিষ্ট ফোল্ডারে সেগুলো সংরক্ষণ করা হয়েছে।

৩. Java তে Tar ফাইলের সুবিধা ও অসুবিধা

সুবিধা:

  1. ব্যাপক সমর্থন: Tar ফাইল Unix এবং Linux সিস্টেমে ব্যাপকভাবে ব্যবহৃত হয় এবং এসব সিস্টেমে কার্যকরীভাবে কাজ করে।
  2. ফাইল গঠন: Tar ফাইলগুলি বিভিন্ন ফাইল এবং ডিরেক্টরি সংরক্ষণের জন্য উপযুক্ত।
  3. কম্প্রেশন সহ ব্যবহার: tar ফাইলের সাথে সহজেই কম্প্রেশন যুক্ত করা যায় (tar.gz বা tar.bz2)।

অসুবিধা:

  1. কম্প্রেশন ছাড়া: Tar ফাইলগুলি শুধুমাত্র আর্কাইভ ফরম্যাট। এটি নিজে কোন কম্প্রেশন প্রক্রিয়া নয়, তাই বড় ফাইলের ক্ষেত্রে এটি কার্যকরী নয় যদি কম্প্রেশন না করা হয়।
  2. প্রযুক্তিগত সীমাবদ্ধতা: Windows এর জন্য tar ফাইল ব্যবহারে কিছু সীমাবদ্ধতা থাকতে পারে, যদিও আধুনিক সিস্টেমে এটি সমর্থিত।

Java তে Tar ফাইল ম্যানেজমেন্টের জন্য আপনি Apache Commons Compress লাইব্রেরি ব্যবহার করতে পারেন। এই লাইব্রেরি দিয়ে আপনি সহজেই Tar ফাইল তৈরি এবং এক্সট্র্যাক্ট করতে পারবেন, তবে আপনাকে gzip বা bzip2 ফরম্যাটের সাথে টার ফাইল কম্প্রেস করতে হলে সেই সমর্থনও নিতে হবে।

Content added By

Tar ফাইল (যার পূর্ণ রূপ হলো Tape Archive) একটি আর্কাইভ ফাইল ফরম্যাট যা মূলত ইউনিক্স এবং লিনাক্স সিস্টেমে ব্যবহৃত হয়। এটি একাধিক ফাইল বা ডিরেক্টরি একটি একক ফাইলে সংরক্ষণ করার জন্য ব্যবহৃত হয়। মূলত, Tar ফাইল ডেটার স্টোরেজ বা ব্যাকআপ উদ্দেশ্যে ব্যবহৃত হয়, এবং এটি একটি ফাইল বা ডিরেক্টরি স্ট্রাকচারকে সংরক্ষণ করার জন্য ব্যবহৃত হয়, যাতে পরে এটি আরেকটি সিস্টেমে সহজে এক্সট্র্যাক্ট করা যেতে পারে।

Tar ফাইল নিজেই সাধারণত কোনো কম্প্রেশন করে না, তবে এটি gzip বা bzip2 এর মতো কম্প্রেশন সফটওয়্যার দ্বারা কম্প্রেস করা হতে পারে। এই কম্প্রেসড Tar ফাইলগুলোকে সাধারণত .tar.gz, .tgz, .tar.bz2 ইত্যাদি এক্সটেনশন দেওয়া হয়।

Tar ফাইল ব্যবহারের কারণ:

  1. একাধিক ফাইল একত্রিত করা:
    • Tar ফাইল একটি নির্দিষ্ট ফাইল ফরম্যাট যা একাধিক ফাইলকে একত্রে সংরক্ষণ করতে সাহায্য করে, একটি একক ফাইলে। একাধিক ফাইল বা ডিরেক্টরি সংরক্ষণ করার মাধ্যমে তারা সহজেই এক্সপোর্ট, ইমপোর্ট বা ব্যাকআপ করা যায়।
  2. ডিরেক্টরি স্ট্রাকচার বজায় রাখা:
    • Tar ফাইল একটি ডিরেক্টরি স্ট্রাকচারসহ ফাইলগুলি সংরক্ষণ করে, যার ফলে এটি ফাইলের হারানো স্ট্রাকচার পুনরুদ্ধার করতে সাহায্য করে। উদাহরণস্বরূপ, যদি আপনি একটি ডিরেক্টরি সংরক্ষণ করেন, Tar ফাইলটি সেই ডিরেক্টরির অন্তর্গত ফাইলগুলির একটি এক্সাক্ট কপি তৈরি করবে এবং পরে তা আবার সেই একই স্ট্রাকচারে আনজিপ করা যেতে পারে।
  3. ব্যাকআপ এবং আর্কাইভিং:
    • Tar ফাইল সাধারণত ব্যাকআপ এবং আর্কাইভিং কাজের জন্য ব্যবহৃত হয়। যখন কোনো ফাইল সিস্টেমের ডেটা স্টোর করতে হয়, তখন Tar ফাইল ব্যবহার করা হয় যাতে সিস্টেমের সমস্ত ফাইল একত্রে এবং একক ফাইল হিসেবে সংরক্ষিত হয়।
  4. প্রচলিত লিনাক্স সিস্টেমে ব্যবহৃত:
    • Tar একটি পুরানো এবং জনপ্রিয় টুল যা লিনাক্স ও ইউনিক্স ভিত্তিক সিস্টেমে ব্যবহৃত হয়। এটি বিশেষভাবে সিস্টেম প্রশাসক এবং ডেভেলপারদের জন্য গুরুত্বপূর্ণ, কারণ এটি ফাইল এবং ডিরেক্টরি আর্কাইভ করার জন্য সহজ ও কার্যকর পদ্ধতি সরবরাহ করে।
  5. নির্দিষ্ট প্ল্যাটফর্মের জন্য সফটওয়্যার প্যাকেজিং:
    • অনেক ওপেন সোর্স প্রোগ্রাম এবং সফটওয়্যার প্যাকেজ .tar ফরম্যাটে বিতরণ করা হয়, যা একটি নির্দিষ্ট প্ল্যাটফর্মে একত্রিত করা এবং এক্সট্র্যাক্ট করা সহজ।

Tar ফাইলের কম্প্রেশন:

যদিও Tar ফাইল স্বাভাবিকভাবেই কম্প্রেস করে না, তবে এটি অন্যান্য কম্প্রেশন টুলের সাথে ব্যবহার করা যেতে পারে। বেশ কিছু জনপ্রিয় কম্প্রেশন ফরম্যাটের সাথে Tar ফাইল সংযুক্ত করা হয়:

  • gzip: .tar.gz অথবা .tgz এক্সটেনশন ব্যবহার করা হয়।
  • bzip2: .tar.bz2 এক্সটেনশন ব্যবহার করা হয়।
  • xz: .tar.xz এক্সটেনশন ব্যবহার করা হয়।

এই কম্প্রেশন টুলস ব্যবহার করলে, টার ফাইলের আকার আরও ছোট হয়ে যায়, যার ফলে এটি আরও কম্প্যাক্ট এবং দ্রুত ডাউনলোড বা ট্রান্সফার করা যায়।

Java তে Tar ফাইল ব্যবস্থাপনা:

Java তে Tar ফাইল পরিচালনার জন্য কোনো বিল্ট-ইন ক্লাস নেই, কিন্তু Java তে কিছু তৃতীয় পক্ষের লাইব্রেরি রয়েছে যা Tar ফাইল তৈরি এবং এক্সট্র্যাক্ট করতে সাহায্য করে। একটি জনপ্রিয় লাইব্রেরি হচ্ছে Apache Commons Compress

Apache Commons Compress লাইব্রেরি ব্যবহার করে Tar ফাইল তৈরি এবং এক্সট্র্যাক্ট করার উদাহরণ:

1. Tar ফাইল তৈরি করা (Tar File Creation)
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
import java.util.zip.GZIPOutputStream;

public class TarExample {
    public static void main(String[] args) throws IOException {
        // Tar ফাইল তৈরি করার জন্য আউটপুট স্ট্রিম
        FileOutputStream fos = new FileOutputStream("archive.tar.gz");
        GZIPOutputStream gzip = new GZIPOutputStream(fos);
        TarArchiveOutputStream tarOut = new TarArchiveOutputStream(gzip);

        // ফাইল যোগ করার জন্য TarEntry তৈরি করা
        File fileToTar = new File("file1.txt");
        TarArchiveEntry entry = new TarArchiveEntry(fileToTar, fileToTar.getName());
        tarOut.putArchiveEntry(entry);

        // ফাইলের কনটেন্ট লেখানো
        FileInputStream fis = new FileInputStream(fileToTar);
        IOUtils.copy(fis, tarOut);

        // ফাইলের লেখন শেষ করা
        tarOut.closeArchiveEntry();
        fis.close();
        tarOut.finish();
        tarOut.close();
        System.out.println("Tar ফাইল সফলভাবে তৈরি হয়েছে!");
    }
}
2. Tar ফাইল এক্সট্র্যাক্ট করা (Tar File Extraction)
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;

public class UntarExample {
    public static void main(String[] args) throws IOException {
        // Tar ফাইল ইনপুট স্ট্রিম
        FileInputStream fis = new FileInputStream("archive.tar.gz");
        TarArchiveInputStream tarIn = new TarArchiveInputStream(new GZIPInputStream(fis));

        TarArchiveEntry entry;
        while ((entry = tarIn.getNextTarEntry()) != null) {
            // ফাইল এক্সট্র্যাক্ট করার জন্য
            File outputFile = new File(entry.getName());
            FileOutputStream fos = new FileOutputStream(outputFile);
            IOUtils.copy(tarIn, fos);
            fos.close();
        }
        tarIn.close();
        System.out.println("Tar ফাইল সফলভাবে এক্সট্র্যাক্ট হয়েছে!");
    }
}
  • Tar ফাইল একটি জনপ্রিয় ফাইল আর্কাইভ ফরম্যাট যা একাধিক ফাইল এবং ডিরেক্টরিকে একটি একক ফাইলে সংরক্ষণ করতে ব্যবহৃত হয়।
  • Java তে Tar ফাইল ব্যবস্থাপনা করার জন্য আপনি Apache Commons Compress লাইব্রেরি ব্যবহার করতে পারেন, যা Tar ফাইল তৈরি এবং এক্সট্র্যাক্ট করতে সাহায্য করে।
  • Tar ফাইল মূলত Unix/Linux সিস্টেমে ব্যবহৃত হলেও, কম্প্রেশন টুলের মাধ্যমে এটি অন্যান্য সিস্টেমেও ব্যবহৃত হতে পারে।
Content added By

Java তে TAR (Tape Archive) ফাইল ব্যবহৃত হয় অনেক ফাইল বা ডিরেক্টরি একত্রিত (archive) করতে। TAR ফাইল মূলত একটি আর্কাইভ ফাইল, কিন্তু এটি কম্প্রেশন ফরম্যাট নয়। TAR ফাইলের মধ্যে একাধিক ফাইল এবং ডিরেক্টরি থাকে, যা একটি একক ফাইল হিসাবে সংরক্ষিত থাকে। TarInputStream, TarOutputStream, এবং TarEntry ক্লাসগুলি Java তে TAR ফাইল হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়।

1. TarEntry

TarEntry একটি ক্লাস যা TAR ফাইলের একটি এন্ট্রি বা উপাদানকে উপস্থাপন করে। প্রতিটি TarEntry সাধারণত একটি ফাইল বা ডিরেক্টরি এবং এর মেটাডেটা (যেমন ফাইলের নাম, সাইজ, মোড, টাইমস্ট্যাম্প ইত্যাদি) ধারণ করে।

ভূমিকা:

  • ফাইল বা ডিরেক্টরি উপাদান: TarEntry একটি নির্দিষ্ট ফাইল বা ডিরেক্টরি এন্ট্রি হিসাবে কাজ করে।
  • মেটাডেটা: এটি সেই ফাইল বা ডিরেক্টরির বিভিন্ন বৈশিষ্ট্য যেমন সাইজ, পাথ, এবং টাইমস্ট্যাম্প সংরক্ষণ করে।
  • এন্ট্রি তৈরি: এটি নতুন TAR এন্ট্রি তৈরি করতে ব্যবহার করা হয় এবং TarInputStream এবং TarOutputStream এর মাধ্যমে ফাইলের তথ্য পঠন বা লেখার সময় ব্যবহৃত হয়।

উদাহরণ:

import java.util.zip.*;
import java.io.*;

public class TarEntryExample {
    public static void main(String[] args) {
        // TarEntry তৈরি
        TarEntry entry = new TarEntry("file.txt");
        entry.setSize(1024); // ফাইল সাইজ নির্ধারণ
        entry.setModTime(System.currentTimeMillis()); // ফাইলের মডিফিকেশন টাইম সেট করা

        // TarEntry এর তথ্য প্রিন্ট করা
        System.out.println("Entry Name: " + entry.getName());
        System.out.println("Entry Size: " + entry.getSize());
        System.out.println("Modification Time: " + entry.getModTime());
    }
}

2. TarInputStream

TarInputStream একটি স্ট্রিম ক্লাস যা TAR ফাইল থেকে ডেটা পড়ার জন্য ব্যবহৃত হয়। এটি মূলত একটি ইনপুট স্ট্রিম, যা TAR ফাইলের ভিতরে থাকা প্রতিটি TarEntry থেকে ডেটা পড়তে সক্ষম।

ভূমিকা:

  • ফাইলের মধ্যে পড়া: এটি TAR ফাইলের মধ্যে থাকা ফাইল বা ডিরেক্টরি থেকে ডেটা পড়তে ব্যবহৃত হয়।
  • স্ট্রিমিং API: TarInputStream স্ট্রিমিং পদ্ধতিতে কাজ করে, অর্থাৎ এটি একের পর এক ফাইলের ডেটা প্রক্রিয়া করতে সক্ষম।
  • TAR এন্ট্রি প্রসেস করা: TarInputStream ব্যবহার করে TAR ফাইলের প্রতিটি TarEntry এর ডেটা পড়া এবং প্রসেস করা হয়।

উদাহরণ:

import java.io.*;
import java.util.zip.*;

public class TarInputStreamExample {
    public static void main(String[] args) {
        String tarFilePath = "example.tar";
        
        try (TarInputStream tarIn = new TarInputStream(new FileInputStream(tarFilePath))) {
            TarEntry entry;
            
            // TAR ফাইলের সব এন্ট্রি পড়ে
            while ((entry = tarIn.getNextEntry()) != null) {
                System.out.println("Extracting: " + entry.getName());
                
                // প্রতিটি entry থেকে ডেটা পড়া
                byte[] buffer = new byte[1024];
                int length;
                while ((length = tarIn.read(buffer)) > 0) {
                    // এখানে ডেটা প্রক্রিয়া বা ফাইল লেখার কোড দেওয়া যেতে পারে
                }
            }
        } catch (IOException e) {
            System.err.println("Error reading TAR file: " + e.getMessage());
        }
    }
}

3. TarOutputStream

TarOutputStream একটি আউটপুট স্ট্রিম ক্লাস যা TAR ফাইল তৈরি এবং লেখার জন্য ব্যবহৃত হয়। এটি TarEntry তৈরি করে এবং প্রতিটি TarEntry এর ডেটা TAR ফাইলে লেখে। এটি নতুন TAR আর্কাইভ তৈরি বা বিদ্যমান TAR ফাইলে ফাইল যুক্ত করার জন্য ব্যবহৃত হয়।

ভূমিকা:

  • ফাইল তৈরি ও লেখার জন্য: TarOutputStream ব্যবহার করে নতুন TAR ফাইল তৈরি করা এবং ডিরেক্টরি বা ফাইল যোগ করা হয়।
  • TAR এন্ট্রি তৈরি: এটি TarEntry তৈরি করতে এবং এগুলি TAR ফাইলে সংযুক্ত করতে ব্যবহৃত হয়।
  • ডেটা লেখা: এটি প্রতিটি ফাইলের ডেটা TAR ফাইলে লেখে।

উদাহরণ:

import java.io.*;
import java.util.zip.*;

public class TarOutputStreamExample {
    public static void main(String[] args) {
        String outputTarFile = "output.tar";
        
        try (TarOutputStream tarOut = new TarOutputStream(new FileOutputStream(outputTarFile))) {
            // TarEntry তৈরি
            TarEntry entry = new TarEntry("file1.txt");
            entry.setSize(1024);  // ফাইল সাইজ
            tarOut.putNextEntry(entry);
            
            // ডেটা লেখার জন্য
            String fileContent = "Hello, TAR!";
            byte[] contentBytes = fileContent.getBytes();
            tarOut.write(contentBytes);
            
            // Entry ক্লোজ করা
            tarOut.closeEntry();
            
            System.out.println("TAR ফাইল সফলভাবে তৈরি হয়েছে!");
        } catch (IOException e) {
            System.err.println("Error writing TAR file: " + e.getMessage());
        }
    }
}

পার্থক্য এবং একে অপরের সাথে সম্পর্ক:

  1. TarEntry: একটি TarEntry একটি একক ফাইল বা ডিরেক্টরি প্রতিনিধিত্ব করে যা TAR আর্কাইভে সংরক্ষিত থাকে। এটি ফাইলের নাম, সাইজ, টাইমস্ট্যাম্প ইত্যাদি মেটাডেটা ধারণ করে।
  2. TarInputStream: এটি একটি ইনপুট স্ট্রিম যা একটি TAR ফাইল থেকে ডেটা পড়তে ব্যবহৃত হয় এবং TarEntry এর মধ্যে থাকা প্রতিটি ফাইলের ডেটা বের করে।
  3. TarOutputStream: এটি একটি আউটপুট স্ট্রিম যা TAR ফাইল তৈরি এবং লেখার জন্য ব্যবহৃত হয় এবং TarEntry এর মাধ্যমে ফাইল বা ডিরেক্টরি গুলি টার ফাইলে যোগ করা হয়।
  • TarEntry একটি নির্দিষ্ট TAR এন্ট্রি উপস্থাপন করে (যেমন ফাইল বা ডিরেক্টরি)।
  • TarInputStream একটি স্ট্রিম যা TAR ফাইল থেকে ডেটা পড়তে সহায়তা করে।
  • TarOutputStream একটি স্ট্রিম যা TAR ফাইলে ডেটা লিখতে সহায়তা করে।

এই তিনটি ক্লাস একত্রে কাজ করে এবং TAR আর্কাইভ তৈরি, ম্যানিপুলেট এবং এক্সট্র্যাক্ট করার জন্য Java তে কার্যকরী উপায় প্রদান করে।

Content added By

Tar (Tape Archive) ফাইল একটি জনপ্রিয় আর্কাইভ ফরম্যাট যা Unix-like অপারেটিং সিস্টেমে ব্যবহৃত হয়। এটি একাধিক ফাইল এবং ডিরেক্টরি একত্রে একটি ফাইলে সংরক্ষণ করতে ব্যবহৃত হয়। Java তে Tar ফাইলের সাথে কাজ করার জন্য Java API সরাসরি এটি সমর্থন করে না, কিন্তু আপনি Apache Commons Compress লাইব্রেরি ব্যবহার করে Tar ফাইল তৈরি এবং Extract করতে পারেন।

Apache Commons Compress লাইব্রেরি

Apache Commons Compress লাইব্রেরি Java তে বিভিন্ন আর্কাইভ ফাইল (যেমন .tar, .gz, .zip ইত্যাদি) তৈরি এবং Extract করতে সাহায্য করে। আপনি এই লাইব্রেরি ব্যবহার করে Tar ফাইল তৈরি এবং Extract করতে পারবেন।

1. Tar ফাইল তৈরি করা (Using Apache Commons Compress)

স্টেপ 1: প্রথমে, আপনাকে Apache Commons Compress লাইব্রেরি ডাউনলোড করতে হবে। আপনি Maven ব্যবহার করলে এটি আপনার pom.xml ফাইলে যোগ করতে পারেন:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

স্টেপ 2: এবার Java কোডে Tar ফাইল তৈরি করা হবে।

import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;
import java.util.zip.GZIPOutputStream;

public class CreateTarFile {

    public static void main(String[] args) {
        String tarFilePath = "example.tar";  // Tar ফাইলের আউটপুট পাথ
        String inputFilePath = "example.txt"; // যে ফাইলটি Tar ফাইলে যুক্ত হবে

        try (FileOutputStream fos = new FileOutputStream(tarFilePath);
             TarArchiveOutputStream tarOut = new TarArchiveOutputStream(fos)) {

            // Tar ফাইলের জন্য মেটাডেটা সেট করা
            tarOut.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR);
            tarOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);

            File fileToAdd = new File(inputFilePath);
            try (FileInputStream fis = new FileInputStream(fileToAdd)) {

                // ফাইলের টার এন্ট্রি তৈরি করা
                TarArchiveEntry entry = new TarArchiveEntry(fileToAdd, fileToAdd.getName());
                tarOut.putArchiveEntry(entry);

                // ফাইলটি Tar ফাইলে লিখা
                IOUtils.copy(fis, tarOut);
                tarOut.closeArchiveEntry();
            }

            System.out.println("Tar ফাইল সফলভাবে তৈরি করা হয়েছে।");

        } catch (IOException e) {
            System.out.println("ত্রুটি ঘটেছে: " + e.getMessage());
        }
    }
}

ব্যাখ্যা:

  • TarArchiveOutputStream ব্যবহার করে আমরা Tar আর্কাইভ ফাইল তৈরি করছি।
  • TarArchiveEntry একটি এন্ট্রি তৈরি করতে ব্যবহৃত হয়, যা একটি নির্দিষ্ট ফাইল বা ডিরেক্টরির প্রতিনিধিত্ব করে।
  • IOUtils.copy() ব্যবহার করে ফাইলের বিষয়বস্তু Tar ফাইলে কপি করা হয়।
  • closeArchiveEntry() দ্বারা প্রতিটি এন্ট্রি বন্ধ করা হয়।

2. Tar ফাইল থেকে ফাইল Extract করা

আপনি যদি Tar ফাইল থেকে ফাইল Extract করতে চান, তবে এটি করার জন্যও Apache Commons Compress লাইব্রেরি ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:

import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;

public class ExtractTarFile {

    public static void main(String[] args) {
        String tarFilePath = "example.tar";  // যে Tar ফাইলটি Extract করতে হবে
        String outputDir = "output/";        // এক্সট্র্যাক্ট করার গন্তব্য ফোল্ডার

        File destDir = new File(outputDir);
        if (!destDir.exists()) {
            destDir.mkdirs();  // গন্তব্য ফোল্ডার তৈরি করা
        }

        try (FileInputStream fis = new FileInputStream(tarFilePath);
             TarArchiveInputStream tarIn = new TarArchiveInputStream(fis)) {

            TarArchiveEntry entry;
            while ((entry = tarIn.getNextTarEntry()) != null) {
                File outFile = new File(destDir, entry.getName());

                // ফোল্ডার তৈরি করা যদি ফাইলটি ডিরেক্টরি হয়
                if (entry.isDirectory()) {
                    outFile.mkdirs();
                } else {
                    try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outFile))) {
                        IOUtils.copy(tarIn, bos);  // Tar ফাইল থেকে ডেটা কপি করা
                    }
                }
            }

            System.out.println("Tar ফাইল সফলভাবে এক্সট্র্যাক্ট করা হয়েছে।");

        } catch (IOException e) {
            System.out.println("ত্রুটি ঘটেছে: " + e.getMessage());
        }
    }
}

ব্যাখ্যা:

  • TarArchiveInputStream ব্যবহার করা হয়েছে Tar ফাইল থেকে ডেটা পড়ার জন্য।
  • getNextTarEntry() দ্বারা পরবর্তী এন্ট্রি পাওয়া যায় এবং এটি ফাইলের ডেটা পড়তে সহায়তা করে।
  • IOUtils.copy() ব্যবহার করে Tar ফাইলের ডেটা ফাইলের মধ্যে লেখা হয়।
  • mkdirs() ব্যবহার করা হয়েছে যদি কোন ডিরেক্টরি তৈরি করার প্রয়োজন হয়।

3. GZIP সহ Tar ফাইল তৈরি এবং Extract করা (Tar.gz)

আপনি যদি Tar.gz ফাইল (tar ফাইলের সাথে gzip কম্প্রেশন) তৈরি এবং এক্সট্র্যাক্ট করতে চান, তবে GZIPOutputStream এবং GZIPInputStream ব্যবহার করতে পারেন।

Tar.gz ফাইল তৈরি করা:

import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;
import java.util.zip.GZIPOutputStream;

public class CreateTarGzFile {

    public static void main(String[] args) {
        String tarFilePath = "example.tar.gz";  // আউটপুট Tar.gz ফাইলের নাম
        String inputFilePath = "example.txt";   // যে ফাইলটি Tar.gz এ যুক্ত হবে

        try (FileOutputStream fos = new FileOutputStream(tarFilePath);
             GZIPOutputStream gzipOut = new GZIPOutputStream(fos);
             TarArchiveOutputStream tarOut = new TarArchiveOutputStream(gzipOut)) {

            // Tar ফাইলের জন্য মেটাডেটা সেট করা
            tarOut.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR);
            tarOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);

            File fileToAdd = new File(inputFilePath);
            try (FileInputStream fis = new FileInputStream(fileToAdd)) {

                // Tar এন্ট্রি তৈরি করা
                TarArchiveEntry entry = new TarArchiveEntry(fileToAdd, fileToAdd.getName());
                tarOut.putArchiveEntry(entry);

                // ফাইলটি Tar.gz ফাইলে লেখা
                IOUtils.copy(fis, tarOut);
                tarOut.closeArchiveEntry();
            }

            System.out.println("Tar.gz ফাইল সফলভাবে তৈরি করা হয়েছে।");

        } catch (IOException e) {
            System.out.println("ত্রুটি ঘটেছে: " + e.getMessage());
        }
    }
}

Tar.gz ফাইল Extract করা:

import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;
import java.util.zip.GZIPInputStream;

public class ExtractTarGzFile {

    public static void main(String[] args) {
        String tarFilePath = "example.tar.gz";  // উৎস Tar.gz ফাইল
        String outputDir = "output/";           // এক্সট্র্যাক্ট করার গন্তব্য ফোল্ডার

        File destDir = new File(outputDir);
        if (!destDir.exists()) {
            destDir.mkdirs();  // গন্তব্য ফোল্ডার তৈরি করা
        }

        try (FileInputStream fis = new FileInputStream(tarFilePath);
             GZIPInputStream gzipIn = new GZIPInputStream(fis);
             TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn)) {

            TarArchiveEntry entry;
            while ((entry = tarIn.getNextTarEntry()) != null) {
                File outFile = new File(destDir, entry.getName());

                // ফোল্ডার তৈরি করা যদি ফাইলটি ডিরেক্টরি হয়
                if (entry.isDirectory()) {
                    outFile.mkdirs();
                } else {
                    try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outFile))) {
                        IOUtils.copy(tarIn, bos);  // Tar.gz থেকে ডেটা কপি করা
                    }
                }
            }

            System.out.println("Tar.gz ফাইল সফলভাবে এক্সট্র্যাক্ট করা হয়েছে।");

        } catch (IOException e) {
            System.out.println("ত্রুটি ঘটেছে: " + e.getMessage());
        }
    }
}
  • Apache Commons Compress লাইব্রেরি ব্যবহার করে আপনি Tar এবং Tar.gz ফাইল তৈরি এবং এক্সট্র্যাক্ট করতে পারেন।
  • TarArchiveOutputStream এবং TarArchiveInputStream ব্যবহৃত হয় Tar ফাইল তৈরির এবং পড়ার জন্য।
  • GZIPOutputStream এবং GZIPInputStream ব্যবহার করে আপনি Tar.gz ফাইলও তৈরি এবং এক্সট্র্যাক্ট করতে পারেন।

এই পদ্ধতিগুলি আপনাকে Java তে Tar ফাইল ম্যানিপুলেশন করতে সাহায্য করবে, এবং Apache Commons Compress লাইব্রেরি ব্যবহারের মাধ্যমে আপনি কমপ্লেক্স আর্কাইভ ফাইলগুলির সাথে সহজেই কাজ করতে পারবেন।

Content added By

Zip এবং Tar (Tape Archive) দুটি আলাদা আর্কাইভ ফাইল ফরম্যাট যা ফাইল কম্প্রেশন এবং আর্কাইভ করার জন্য ব্যবহৃত হয়, তবে তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। Java তে এই দুটি ফাইল ফরম্যাটের ব্যবহারে কিছু ভিন্নতা রয়েছে। চলুন, Zip এবং Tar ফরম্যাটের মধ্যে পার্থক্য এবং তাদের ব্যবহারের ক্ষেত্রে দিকনির্দেশনা নিয়ে আলোচনা করি।

1. Zip এবং Tar ফাইল ফরম্যাটের পার্থক্য

বৈশিষ্ট্যZipTar
কম্প্রেশনZip ফরম্যাট স্বয়ংক্রিয়ভাবে ফাইল কম্প্রেশন করে।Tar ফরম্যাট শুধুমাত্র আর্কাইভ ফাইল তৈরি করে, কম্প্রেশন করনা। কম্প্রেশন করার জন্য অন্য টুল (যেমন gzip, bzip2) ব্যবহার করতে হয়।
ফাইল আর্কাইভZip ফরম্যাট একাধিক ফাইল এবং ডিরেক্টরি একসাথে কম্প্রেস এবং আর্কাইভ করতে পারে।Tar শুধু ফাইল এবং ডিরেক্টরি আর্কাইভ করতে পারে, তবে এটি কম্প্রেশন সক্ষম নয় (gzip, bzip2 এর সাথে যুক্ত করা যায়)।
ফাইলের গঠনZip ফাইলের মধ্যে প্রতিটি ফাইল আলাদা করে কম্প্রেস করা হয়।Tar ফাইল একক ব্লকে আর্কাইভ হয়, এবং এতে সব ফাইল একত্রে থাকে।
প্ল্যাটফর্ম কম্প্যাটিবিলিটিZip ফাইল উইন্ডোজ, লিনাক্স, ম্যাক সহ বিভিন্ন প্ল্যাটফর্মে সমর্থিত।Tar ফাইল মূলত ইউনিক্স বা লিনাক্স সিস্টেমে ব্যবহৃত হয়, তবে WinRAR বা 7-Zip এর মাধ্যমে উইন্ডোজেও খুলতে পারা যায়।
ফাইল এক্সটেনশন.zip.tar, .tar.gz, .tgz, .tar.bz2, .tar.xz
ফাইল ম্যানিপুলেশনZip ফাইলের মধ্যে প্রতিটি ফাইল পৃথকভাবে অ্যাক্সেস এবং ম্যানিপুলেট করা যায়।Tar ফাইল একে একে পুরো আর্কাইভের সাথে কাজ করা হয়।

2. Zip এবং Tar ফাইলের ব্যবহারের ক্ষেত্রে দিকনির্দেশনা

Zip ফাইলের ব্যবহারের ক্ষেত্রে দিকনির্দেশনা:

  • কম্প্রেশন প্রয়োজন: যখন আপনাকে ফাইল কম্প্রেস করতে হয় এবং একটি একক আর্কাইভ ফাইল তৈরি করতে হয়, তখন Zip সবচেয়ে ভালো পছন্দ। এতে স্বয়ংক্রিয়ভাবে কম্প্রেশন হয় এবং ফাইলগুলো আলাদা আলাদা কম্প্রেস হতে পারে।
  • বিভিন্ন প্ল্যাটফর্মে ব্যবহার: Zip ফাইল উইন্ডোজ, লিনাক্স এবং ম্যাক OS তে সহজে খুলতে এবং তৈরি করতে পারে। তাই, যদি আপনি একাধিক প্ল্যাটফর্মে কাজ করেন, তখন Zip একটি ভাল পছন্দ।
  • সহজ ব্যবহারের জন্য: Zip ফাইলের জন্য অনেক অ্যাপ্লিকেশন রয়েছে (যেমন WinZip, 7-Zip, macOS এর ইনবিল্ট ইউটিলিটি), যা ফাইল ম্যানিপুলেশন যেমন এক্সট্র্যাক্ট, ফাইল যোগ করা, ফাইল মুছে ফেলা সহজ করে তোলে।

Tar ফাইলের ব্যবহারের ক্ষেত্রে দিকনির্দেশনা:

  • কেবল আর্কাইভ তৈরি করার জন্য: যদি আপনার মূল উদ্দেশ্য শুধুমাত্র ফাইলগুলো একত্রিত করা হয়, তবে Tar ফাইল ব্যবহার করা যায়, কারণ এটি কম্প্রেশন না করে কেবল ফাইল আর্কাইভ করে।
  • লিনাক্স বা ইউনিক্স সিস্টেমে ব্যবহারের জন্য: Tar ফাইল মূলত লিনাক্স এবং ইউনিক্স সিস্টেমে ব্যবহৃত হয়। এই সিস্টেমগুলিতে কম্প্রেশন ফিচার অন্তর্ভুক্ত করা হয় (যেমন tar.gz বা tar.bz2), যা Tar আর্কাইভ ফাইলের মাধ্যমে ব্যবহৃত হয়।
  • এন্টারপ্রাইজ সিস্টেমে ব্যবহারের জন্য: অনেক সিস্টেম অ্যাডমিনিস্ট্রেটর এবং ডেভেলপার Tar ফাইল ফরম্যাট ব্যবহার করে বড় আর্কাইভ তৈরি করতে পছন্দ করেন, কারণ এটি খুবই দক্ষ এবং দ্রুত।

Tar ফাইলের কম্প্রেশন (gzip, bzip2)

Tar ফাইল কম্প্রেশন করার জন্য বিভিন্ন টুল ব্যবহৃত হয়। যেমন:

  • gzip: tar -czf archive.tar.gz folder/ (Tar ফাইলকে gzip দিয়ে কম্প্রেস করা)
  • bzip2: tar -cjf archive.tar.bz2 folder/ (Tar ফাইলকে bzip2 দিয়ে কম্প্রেস করা)

এখন, tar.gz বা tar.bz2 ফাইল ব্যবহার করা খুবই জনপ্রিয়, যেখানে প্রথমে tar দিয়ে আর্কাইভ তৈরি করা হয়, এবং পরে gzip বা bzip2 দিয়ে কম্প্রেস করা হয়।

3. Java তে Zip এবং Tar ফাইল ম্যানিপুলেশন

Zip ফাইলের জন্য Java Code Example (Extracting)

import java.io.*;
import java.util.zip.*;

public class ZipExtractExample {
    public static void main(String[] args) {
        String zipFilePath = "example.zip"; // Zip ফাইল পাথ
        String outputDir = "output/"; // আউটপুট ডিরেক্টরি
        
        try (ZipFile zipFile = new ZipFile(zipFilePath)) {
            zipFile.stream().forEach(entry -> {
                File outputFile = new File(outputDir + entry.getName());
                outputFile.getParentFile().mkdirs();
                try (InputStream in = zipFile.getInputStream(entry);
                     OutputStream out = new FileOutputStream(outputFile)) {
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = in.read(buffer)) > 0) {
                        out.write(buffer, 0, length);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Tar ফাইলের জন্য Java Code Example (Using Apache Commons Compress)

Tar ফাইলের জন্য Java তে Apache Commons Compress লাইব্রেরি ব্যবহার করা হয়। এখানে TarArchiveInputStream ব্যবহার করা হয়।

import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;

public class TarExtractExample {
    public static void main(String[] args) {
        String tarFilePath = "example.tar"; // Tar ফাইল পাথ
        String outputDir = "output/"; // আউটপুট ডিরেক্টরি
        
        try (InputStream fileInputStream = new FileInputStream(tarFilePath);
             TarArchiveInputStream tarInputStream = new TarArchiveInputStream(fileInputStream)) {
            
            TarArchiveEntry entry;
            while ((entry = tarInputStream.getNextTarEntry()) != null) {
                File outputFile = new File(outputDir + entry.getName());
                outputFile.getParentFile().mkdirs();
                
                try (OutputStream out = new FileOutputStream(outputFile)) {
                    IOUtils.copy(tarInputStream, out);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • Zip ফাইল ফরম্যাট কম্প্রেশন এবং আর্কাইভ করার জন্য খুবই জনপ্রিয় এবং ব্যবহারিক। এটি সহজেই একাধিক প্ল্যাটফর্মে সমর্থিত এবং ডেটার সংরক্ষণ এবং এক্সট্রাকশনের ক্ষেত্রে দ্রুত এবং সহজ।
  • Tar ফাইল ফরম্যাট মূলত লিনাক্স এবং ইউনিক্স সিস্টেমে ব্যবহৃত হয় এবং এটি একক আর্কাইভ ফাইল তৈরি করে। কম্প্রেশন করার জন্য gzip বা bzip2 ব্যবহার করা হয়।

তবে, কোন ফাইল ফরম্যাট ব্যবহার করবেন তা নির্ভর করবে আপনার ব্যবহারের প্রয়োজন এবং সিস্টেমের ওপর (উইন্ডোজ বনাম লিনাক্স)।

Content added By
Promotion

Are you sure to start over?

Loading...