"হাই, আমিগো। অনেক দিন, দেখা হয়নি।"

"হাই, বিলাবো। আপনি কি বিষয়ে কথা বলতে যাচ্ছেন?"

"আজ আমি আপনাকে ফাইল নিয়ে কাজ করার বিষয়ে বলতে যাচ্ছি।  জাভা-এর একটি বিশেষ শ্রেণী (ফাইল) আছে যা আপনি একটি হার্ড ড্রাইভে ফাইল পরিচালনা করতে ব্যবহার করতে পারেন। ফাইলের বিষয়বস্তু পরিচালনার জন্য, অন্যান্য ক্লাস রয়েছে: FileInputStream, FileOutputStream, ইত্যাদি। "

ফাইল, ফাইল, পাথ- ১

"ইন্টারেস্টিং। কিন্তু আপনি যখন বলেন 'ফাইল ম্যানেজ করুন', আপনি কি বোঝাতে চান?"

"এটাই আমি এখন ব্যাখ্যা করতে যাচ্ছি। ফাইলগুলি তৈরি, মুছে ফেলা, নাম পরিবর্তন করা এবং আরও অনেক কিছু করা যেতে পারে। আপনি একটি ফাইল অবজেক্টকে কার্যত প্রতিটি ক্লাসে পাস করতে পারেন যা একটি ফাইলের বিষয়বস্তু (পড়া, লেখা, পরিবর্তন) নিয়ে কাজ করে . উদাহরণ স্বরূপ:"

আপনি ফাইলের নাম সরাসরি FileInputStream এ পাস করতে পারেন
FileInputStream input = new FileInputStream("c:/path/a.txt");
অথবা আপনি আলাদাভাবে একটি ফাইল অবজেক্ট তৈরি করতে পারেন, এবং তারপর এটি FileInputStrea-এ পাস করতে পারেন
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

"কিন্তু দ্বিতীয় বিকল্পটি দীর্ঘ। আমি এখনও বুঝতে পারছি না কেন আমাদের এই ফাইল অবজেক্টের প্রয়োজন।"

"এই নির্দিষ্ট উদাহরণের জন্য, আপনি সঠিক।" এটি আপনাকে কীভাবে করতে হবে তার একটি উদাহরণ নয়, বরং আপনি কীভাবে এটি করতে পারেন।
কিন্তু কল্পনা করুন যে আপনাকে একটি নির্দিষ্ট ডিরেক্টরিতে অবস্থিত সমস্ত ফাইলের একটি তালিকা প্রদর্শন করতে হবে। ফাইল অবজেক্ট ব্যবহার করে এটি কীভাবে করা যেতে পারে তা এখানে:"

কোড
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

" listFiles() কি একটি পদ্ধতি যা «c:/path/» দ্বারা নির্দেশিত ফোল্ডারে ফাইলগুলির একটি তালিকা প্রদান করে?"

"হ্যাঁ। কিন্তু প্রোগ্রামাররা সাধারণত 'ডিরেক্টরি' বলে। 'ফোল্ডার' শব্দটি তুলনামূলকভাবে সম্প্রতি ব্যবহার করা হয়েছে, কিন্তু নীতিগতভাবে, উভয় পদই সঠিক এবং আপনি যেটি পছন্দ করেন তা বলতে পারেন।"

"ঠিক আছে। এবং getName () কি করে ? ফাইলের নাম রিটার্ন করবেন? নামের মধ্যে ঠিক কী অন্তর্ভুক্ত আছে? পাথ সহ পুরো নাম, নাকি ফাইলের নিজেই নাম?"

"শুধুমাত্র ফাইলের নাম। সম্পূর্ণ পাথের জন্য, সেখানে file.getAbsolutePath() আছে।"

"তাহলে ফাইল ক্লাসের অন্য কোন পদ্ধতি আছে?"

"এক নজর দেখে নাও:"

পদ্ধতি বর্ণনা
boolean isDirectory() ফাইল অবজেক্ট একটি ডিরেক্টরি?
boolean isFile() বস্তু একটি ফাইল?
long length() বাইটে ফাইলের আকার/দৈর্ঘ্য ফেরত দেয়।
boolean createNewFile() এই নামের একটি ফাইল এখনও বিদ্যমান না থাকলে একটি নতুন, খালি ফাইল তৈরি করে।
boolean mkdir() একটি ডিরেক্টরি তৈরি করে। "mkdir" নামটি "মেক ডিরেক্টরি" থেকে এসেছে।
boolean mkdirs() একটি ডিরেক্টরি এবং এর সমস্ত সাবডিরেক্টরি তৈরি করে।
boolean delete() বস্তুর সাথে যুক্ত ফাইল মুছে দেয়। যদি অবজেক্টটি একটি ডিরেক্টরি হয়, তাহলে ডিরেক্টরিটি মুছে ফেলা হয় শুধুমাত্র যদি এতে কোন ফাইল না থাকে।
void deleteOnExit() ফাইলটিকে ফাইলগুলির একটি বিশেষ তালিকায় যুক্ত করে যা প্রোগ্রামটি প্রস্থান করার সময় স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে।
File createTempFile(
String prefix,
String suffix,
File directory)
একটি এলোমেলোভাবে উত্পন্ন অনন্য নাম সহ একটি অস্থায়ী ফাইল তৈরি করে, যেমন "dasd4d53sd"।
অতিরিক্ত পরামিতি হল একটি নাম উপসর্গ এবং প্রত্যয়। যদি একটি ডিরেক্টরি নির্দিষ্ট করা না থাকে, তাহলে ফাইলটি অস্থায়ী ফাইলগুলির জন্য একটি বিশেষ OS ডিরেক্টরিতে তৈরি করা হয়।
boolean exists() হার্ড ড্রাইভে একই নামের একটি ফাইল বিদ্যমান থাকলে সত্য ফেরত দেয়।
String getAbsolutePath() ফাইলের সমস্ত সাব-ডিরেক্টরি সহ পুরো পাথ ফেরত দেয়।
String getCanonicalPath() ক্যানোনিকাল ফাইল পাথ ফেরত দেয়।
উদাহরণস্বরূপ, "c:/dir/dir2/../a.txt" পাথকে "c:/dir/a.txt" এ রূপান্তরিত করে
String[] list() বর্তমান অবজেক্ট দ্বারা উপস্থাপিত ডিরেক্টরিতে থাকা ফাইলগুলির নামের একটি অ্যারে প্রদান করে।
File[] listFiles() বর্তমান ফাইল অবজেক্ট দ্বারা উপস্থাপিত ডিরেক্টরিতে থাকা ফাইলগুলির একটি অ্যারে প্রদান করে।
long getTotalSpace() ফাইলটি যে ডিস্কে অবস্থিত তাতে মোট স্থানের পরিমাণ (বাইটের সংখ্যা) প্রদান করে।
long getFreeSpace() ফাইলটি যে ডিস্কে অবস্থিত সেখানে খালি স্থানের পরিমাণ (বাইটের সংখ্যা) প্রদান করে।
boolean renameTo(File) ফাইলের নাম পরিবর্তন করে, অর্থাৎ ফাইলের বিষয়বস্তু আসলে একটি নতুন নাম পায়। অন্য কথায়, আপনি "c:/dir/a.txt" ফাইলের নাম পরিবর্তন করে "d:/out/text/b.doc" করতে পারেন।
String getName() পাথ ছাড়া শুধুমাত্র ফাইলের নাম প্রদান করে।
String getParent() নাম ছাড়াই বর্তমান ফাইলে শুধুমাত্র পাথ (ডিরেক্টরি) ফেরত দেয়।
Path toPath() একটি পাথ অবজেক্ট রিটার্ন করে যা বর্তমান ফাইল অবজেক্টের সাথে মিলে যায়।

"ওহ! খুব ছোট তালিকা নয়, হাহ? এবং মনে হচ্ছে আপনি এটি দিয়ে অনেক কিছু করতে পারেন: ফাইল তৈরি করুন এবং মুছুন, তাদের নাম পরিবর্তন করুন,..."

"তাহলে বর্তমান ফাইলের ডিরেক্টরি পেতে, আমাকে getParent() কল করতে হবে?"

"হ্যাঁ, কিন্তু এটি একটি স্ট্রিং - ফাইল পাথ - একটি ফাইল অবজেক্ট নয়৷ প্রকৃতপক্ষে, ফাইল ক্লাসটি তার প্রায় সমস্ত পদ্ধতির নকল করে: একটি সংস্করণ একটি স্ট্রিং প্রদান করে, অন্যটি - একটি ফাইল অবজেক্ট৷ এটি পরীক্ষা করে দেখুন:"

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

আপনার যদি ফাইল পাথ সহ একটি স্ট্রিং থাকে এবং আপনার একটি ফাইল অবজেক্টের প্রয়োজন হয়, তাহলে কনস্ট্রাক্টর ব্যবহার করুন। যদি পরিস্থিতি বিপরীত হয় (আপনার একটি ফাইল অবজেক্ট আছে তবে আপনার একটি স্ট্রিং প্রয়োজন), তারপর getAbsolutePath () ব্যবহার করুন। উদাহরণ স্বরূপ:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"বুঝেছি."

"দারুণ। তাহলে এখানে আপনার জন্য একটি ছোট কাজ: বর্তমান ফাইলের মতো একই ডিরেক্টরিতে অবস্থিত সমস্ত ফাইলের নাম দেখান।"

"কিছুই সহজ হতে পারে না। এখানে দেখুন:"

কোড
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"হুম। সঠিক।"

"কিন্তু এটা একটু বিভ্রান্তিকর যে একই ক্লাস - ফাইল - ফাইল এবং ডিরেক্টরি উভয়ের জন্যই ব্যবহার করা হয়। এটি আমার কাছে খুব যুক্তিযুক্ত বলে মনে হয় না।"

"ঐতিহাসিক কারণের জন্য এটি এমনভাবে কাজ করেছে। একটি ডিরেক্টরি ডিস্কে একটি বিশেষ 'খালি' ফাইল হিসাবে ব্যবহৃত হত। অবশ্যই, এখন অনেক কিছু পরিবর্তিত হয়েছে, তবে সবকিছু নয়। আজ আমার কাছে এটিই রয়েছে।"

"আকর্ষণীয় পাঠের জন্য ধন্যবাদ, বিলাবো।"