মূল বিষয়বস্তুতে যান

CooLWJ-এ খুঁজুন

选择搜索范围,输入关键词后按回车。

ভাষা

java file দিয়ে ফাইলের ধরন নির্ণয়

Java ডেভেলপমেন্টে প্রায়ই ফাইলের ধরন নির্ধারণ করতে হয়; যেমন, ফাইল আপলোডের সুবিধায় ব্যবহারকারীর আপলোড করা ফাইল প্রয়োজনীয় ধরনের কি না তা যাচাই করতে হয়। এই নিবন্ধে Java ব্যবহার করে ফাইলের ধরন জানার পদ্ধতি বিস্তারিতভাবে তুলে ধরা হবে।

এক、ফাইলের এক্সটেনশন দিয়ে ফাইলের ধরন নির্ধারণ

ফাইলের ধরন শনাক্ত করার সবচেয়ে প্রচলিত পদ্ধতি হলো ফাইলের এক্সটেনশন দেখে নির্ধারণ করা।অপারেটিং সিস্টেমে অধিকাংশ ফাইলের একটি নির্দিষ্ট এক্সটেনশন থাকে,যেমন টেক্সট ফাইলের এক্সটেনশন সাধারণত হয়.txt,ছবির ফাইলের এক্সটেনশন সাধারণত.jpg অথবা.png ইত্যাদি।

Java প্রোগ্রামের মাধ্যমে ফাইলের এক্সটেনশন বের করা খুবই সহজ, শুধু ব্যবহার করতে হবেString ক্লাসের substring মেথড ব্যবহার করলেই হবে, কোড নিচে দেখানো হয়েছে:

public static String getFileExtension(File file) {
    String fileName = file.getName();
    if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
        return fileName.substring(fileName.lastIndexOf(".") + 1);
    } else {
        return "";
    }
}


এই মেথডটি একটি গ্রহণ করেFile অবজেক্টকে প্যারামিটার হিসেবে দিয়ে, তারপর ব্যবহার করে lastIndexOf পদ্ধতি দিয়ে ফাইলের নামের শেষ বিন্দুটির অবস্থান, অর্থাৎ এক্সটেনশনের শুরুর অবস্থান খুঁজে বের করা হয়, তারপর ব্যবহার করা হয়substring পদ্ধতিটি এক্সটেনশনের স্ট্রিং সংগ্রহ করে ফেরত দেয়।ফাইলের এক্সটেনশন না থাকলে,খালি স্ট্রিং ফেরত দেয়।

নিচের কোড দিয়ে এই পদ্ধতি পরীক্ষা করা যায়:

File file = new File("C:/path/to/file.txt");
String extension = getFileExtension(file);
System.out.println(extension);


চালানোর ফলাফল হলো:

txt

এই পদ্ধতিতে ফাইলের ধরন নির্ধারণের সুবিধাগুলো হলো:

  • সহজে ব্যবহারযোগ্য,কোডের বাস্তবায়ন সংক্ষিপ্ত।

  • অধিকাংশ ফাইলের ক্ষেত্রে কার্যকর, কারণ অধিকাংশ ফাইলেরই এক্সটেনশন থাকে।

তবে, এই পদ্ধতিরও কিছু অসুবিধা আছে:

  • ফাইলের এক্সটেনশন বদলে দেওয়া হতে পারে, ফলে শনাক্তকরণের ফল ভুল হতে পারে।

  • কিছু ফাইলের এক্সটেনশন থাকে না, যেমন এক্সটেনশনবিহীন এক্সিকিউটেবল ফাইল।

ফাইলের ধরন আরও নির্ভুলভাবে নির্ধারণ করতে, আমরা ফাইলের ম্যাজিক নম্বরও বিবেচনা করতে পারি।

Java দিয়ে ফাইলের ধরন নির্ণয়ের বিষয়চিত্র

দুই、ফাইলের ম্যাজিক নম্বর দিয়ে ফাইলের ধরন নির্ধারণ

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

Java-তে ফাইলের বাইনারি ডেটা পড়ে ফাইলটির ম্যাজিক নম্বর পাওয়া যায়।

2.1 ফাইলের বাইনারি ডেটা পড়া

আমরা ব্যবহার করতে পারিFileInputStream ক্লাস দিয়ে ফাইলের বাইনারি ডেটা পড়তে। নিচের পদ্ধতি একটি বাইট অ্যারে ফেরত দেবে, যাতে ফাইলের বাইনারি ডেটা থাকবে:

public static byte[] readFileToByteArray(File file) throws IOException {
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
        byte[] data = new byte[(int)file.length()];
        fis.read(data);
        return data;
    } finally {
        if (fis != null) {
            fis.close();
        }
    }
 }


উপরের পদ্ধতিতে ব্যবহার করা হয়েছেFileInputStream ব্যবহার করে ফাইল খুলতে, ডেটা পড়তে এবং সেই ডেটা একটি বাইট অ্যারেতে সংরক্ষণ করতে। খেয়াল রাখবেন, ফাইল পড়া শেষ হলে কল করতে হবেclose পদ্ধতি দিয়ে ফাইল স্ট্রিম বন্ধ করে সিস্টেমের সংস্থান মুক্ত করা হয়।

2.2 ফাইলের ম্যাজিক নম্বর ব্যবহার করে ফাইলের ধরন নির্ধারণ

ফাইলের বাইনারি ডেটা হাতে থাকলে আমরা ফাইলের ধরন নির্ধারণ করতে পারি। প্রতিটি ধরনের ফাইলের একটি নির্দিষ্ট ম্যাজিক নম্বর থাকে, যা দিয়ে ফাইলের ধরন চেনা যায়। নিচে কয়েকটি প্রচলিত ফাইলের ধরনের ম্যাজিক নম্বর ও সংশ্লিষ্ট শনাক্তকরণ পদ্ধতি দেওয়া হলো:

  • টেক্সট ফাইলের(.txt)ম্যাজিক নম্বর হলোEF BB BF(UTF-8 এনকোডিংয়ের ফাইলের শুরুতে এই বাইটক্রমটি থাকে),নিচের পদ্ধতিতে যাচাই করা যায়:

    public static boolean isTextFile(byte[] data) {
      if (data.length >= 3 && data[0] == -17 && data[1] == -69 && data[2] == -65) {
          return true;
      }
      return false;
    }


  • JPEG ছবির(.jpg)ম্যাজিক নম্বর হলোFF D8 FF,নিচের পদ্ধতিতে নির্ধারণ করা যায়:

    public static boolean isJPEGFile(byte[] data) {
      if (data.length >= 3 && data[0] == -1 && data[1] == -40 && data[2] == -1) {
          return true;
      }
      return false;
     }


  • PNG ছবির(.png)ম্যাজিক নম্বর হলো89 50 4E 47 0D 0A 1A 0A,নিচের পদ্ধতিতে নির্ধারণ করা যায়:

    public static boolean isPNGFile(byte[] data) {
      if (data.length >= 8 && data[0] == -119 && data[1] == 80 && data[2] == 78 && data[3] == 71 &&
          data[4] == 13 && data[5] == 10 && data[6] == 26 && data[7] == 10) {
          return true;
      }
      return false;
    }


প্রয়োজন অনুযায়ী আরও ফাইলের ধরন এবং সংশ্লিষ্ট ম্যাজিক নম্বর শনাক্ত করার পদ্ধতি যোগ করা যেতে পারে。

2.3 সম্পূর্ণ উদাহরণ

নিচে একটি সম্পূর্ণ উদাহরণ দেওয়া হলো, যেখানে ফাইলের ম্যাজিক নম্বর ব্যবহার করে ফাইলের ধরন নির্ধারণ দেখানো হয়েছে:

import java.io.File;import java.io.FileInputStream;import java.io.IOException;public class FileTypeChecker {
    public static void main(String[] args) {
        File file = new File("C:/path/to/file.jpg");
        try {
            byte[] data = readFileToByteArray(file);
            if (isJPEGFile(data)) {
                System.out.println("This is a JPEG file.");
            } else if (isPNGFile(data)) {
                System.out.println("This is a PNG file.");
            } else if (isTextFile(data)) {
                System.out.println("This is a text file.");
            } else {
                System.out.println("Unknown file type.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static byte[] readFileToByteArray(File file) throws IOException {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            byte[] data = new byte[(int)file.length()];
            fis.read(data);
            return data;
        } finally {
            if (fis != null) {
                fis.close();
            }
        }
    }

    public static boolean isTextFile(byte[] data) {
        if (data.length >= 3 && data[0] == -17 && data[1] == -69 && data[2] == -65) {
            return true;
        }
        return false;
    }

    public static boolean isJPEGFile(byte[] data) {
        if (data.length >= 3 && data[0] == -1 && data[1] == -40 && data[2] == -1) {
            return true;
        }
        return false;
    }

    public static boolean isPNGFile(byte[] data) {
        if (data.length >= 8 && data[0] == -119 && data[1] == 80 && data[2] == 78 && data[3] == 71 &&
            data[4] == 13 && data[5] == 10 && data[6] == 26 && data[7] == 10) {
            return true;
        }
        return false;
    }
 }


উপরের উদাহরণের কোড ফাইলের ম্যাজিক নম্বর অনুযায়ী ফাইলের ধরন নির্ধারণ করে এবং সংশ্লিষ্ট ফলাফল দেখায়।

তিন、তৃতীয় পক্ষের লাইব্রেরি দিয়ে ফাইলের ধরন নির্ণয়

উপরের পদ্ধতিগুলি ছাড়াও,ফাইলের ধরন নির্ধারণে তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করা যায়।Java-তে কিছু ওপেন সোর্স তৃতীয় পক্ষের লাইব্রেরি আছে,যা আরও সহজে ফাইলের ধরন জানতে সাহায্য করতে পারে।

3.1 Tika

Tika Apache Software Foundation-এর একটি প্রকল্প, যা বিভিন্ন ফাইল ফরম্যাট পার্স করার জন্য একটি উন্মুক্ত উৎসের Java লাইব্রেরি সরবরাহ করে; এর মধ্যে টেক্সট, ছবি, অডিও, ভিডিও ইত্যাদি রয়েছে। Tika ব্যবহার করে ফাইলের ধরনসহ তার মেটাডেটা বের করা যায়।

প্রথমে Tika লাইব্রেরির ডিপেন্ডেন্সি যোগ করতে হবে। প্রকল্প তৈরি করতে Maven ব্যবহার করলে,  pom.xml ফাইলে নিচের ডিপেন্ডেন্সিগুলি যোগ করুন:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>1.27</version>
</dependency>


এরপর, ফাইলের ধরন জানতে নিচের কোড ব্যবহার করতে পারেন:

import org.apache.tika.Tika;
public class FileTypeChecker {
    public static void main(String[] args) {
        Tika tika = new Tika();
        try {
            File file = new File("C:/path/to/file.jpg");
            String fileType = tika.detect(file);
            System.out.println("File type: " + fileType);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


উপরের কোড চালালে ফাইলের ধরন আউটপুট হিসেবে দেখাবে।

Tika ফাইলের ধরন শনাক্ত করতে ফাইলের এক্সটেনশন, ম্যাজিক নম্বরসহ বিভিন্ন পদ্ধতি ব্যবহার করে। এটি কাস্টম ডিটেক্টরও সমর্থন করে, ফলে প্রয়োজনমতো ফাইলের ধরন নির্ধারণের নিজস্ব নিয়ম যোগ করা যায়।

3.2 FileTypeDetector

ফাইলের ধরন শনাক্ত করার জন্য Java একটি মানসম্মত API প্রদান করে, সেটি হলোFileTypeDetector ইন্টারফেস এবংProbeContentType ক্লাস। এই ইন্টারফেস বাস্তবায়ন করে নিজস্ব ফাইলের ধরন শনাক্তকারী তৈরি করা যায়।

নিচে একটি কাস্টম ফাইলের ধরন শনাক্তকারীর উদাহরণ দেওয়া হলো:

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.spi.FileTypeDetector;

public class CustomFileTypeDetector extends FileTypeDetector {
    @Override
    public String probeContentType(Path path) throws IOException {
        String extension = getFileExtension(path.toFile());
        if ("txt".equals(extension)) {
            return "text/plain";
        } else if ("jpg".equals(extension) || "jpeg".equals(extension)) {
            return "image/jpeg";
        } else if ("png".equals(extension)) {
            return "image/png";
        } else {
            return null;
        }
    }

    private String getFileExtension(File file) {
        String fileName = file.getName();
        if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
            return fileName.substring(fileName.lastIndexOf(".") + 1);
        } else {
            return "";
        }
    }
  }

এই উদাহরণে,আমরা ফাইলের এক্সটেনশন অনুযায়ী ফাইলের ধরন নির্ধারণ করি,এবং সংশ্লিষ্ট MIME টাইপ ফেরত দিই।

নিজস্ব ফাইলের ধরন শনাক্তকারী ব্যবহার করতে, প্রোগ্রামের প্রবেশবিন্দুতে নিচের কোড যোগ করুন:

File file = new File("C:/path/to/file.jpg");
Path path = file.toPath();
String fileType = Files.probeContentType(path);
System.out.println("File type: " + fileType);

উপরের কোড চালালে ফাইলের ধরন আউটপুট হিসেবে দেখাবে।

খেয়াল রাখবেন, কিছু বিশেষ ধরনের ফাইলের ক্ষেত্রে, যেমন এক্সটেনশনবিহীন এক্সিকিউটেবল ফাইল, এক্সটেনশনভিত্তিক এই পদ্ধতি যথেষ্ট নির্ভুল নাও হতে পারে। তাই আগে আলোচনা করা ফাইলের ম্যাজিক নম্বরভিত্তিক পদ্ধতিটি ব্যবহার করাই বেশি সুপারিশ করা হচ্ছে।

চার、সারসংক্ষেপ

এই নিবন্ধে Java-তে ফাইলের ধরন জানার কয়েকটি পদ্ধতি তুলে ধরা হয়েছে। ফাইলের এক্সটেনশন দেখে ধরন নির্ধারণ করা যায়, আবার ফাইলের ম্যাজিক নম্বর দেখেও তা নির্ধারণ করা যায়। Tika-এর মতো তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করলে আরও সহজে ফাইলের ধরন জানা যায়। বিশেষ ধরনের ফাইলের ক্ষেত্রে নিজস্ব ফাইল টাইপ শনাক্তকারী তৈরি করে নির্ভুলভাবে ধরন নির্ধারণ করা যায়।

ফাইলের ধরন নির্ধারণের উপযুক্ত পদ্ধতি বেছে নেওয়া নির্ভর করে নির্দিষ্ট ব্যবহারিক পরিস্থিতি ও চাহিদার ওপর। বাস্তব উন্নয়নের সময় ফাইলের বৈশিষ্ট্য ও চাহিদা অনুযায়ী সবচেয়ে উপযুক্ত শনাক্তকরণ পদ্ধতি বেছে নিতে হবে এবং সম্প্রসারণযোগ্যতা ও সামঞ্জস্য বিবেচনায় রাখতে হবে।


মন্তব্য

পাঠানো হচ্ছে

জনপ্রিয় লেখা

আপনার থিম বাছুন

আপনার থিম পুরো সাইটে প্রযোজ্য হবে।