"ওহ, ঋষি! হাই!"

"হাই, আমিগো! জীবন কেমন চলছে?"

"দারুণ। বিলাবো আমাকে ফাইল সম্পর্কে একগুচ্ছ মজার জিনিস এবং এটির সাথে কীভাবে কাজ করতে হবে তা বলেছে।"

"যেমন এটি ঘটে, আমি মনে করি এই বিষয়ে আমার কিছু যোগ করার আছে।"

"সত্যি? তাহলে আমি সব কান।"

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

ফাইল, পাথ- 1

"বিকল্প?"

"হ্যাঁ। তারা ফাইল ক্লাসকে ভিত্তি হিসেবে নিয়েছে , কিছু নতুন জিনিস যোগ করেছে, পদ্ধতির নাম পরিবর্তন করেছে, এবং তারপরে এটিকে দুটি ভাগে বিভক্ত করেছে। তাই এখন দুটি নতুন শ্রেণী রয়েছে: পাথ এবং ফাইল ।  পাথ আসলে ফাইলের নতুন অ্যানালগ । ক্লাস, এবং ফাইল হল একটি ইউটিলিটি ক্লাস (অ্যারে এবং কালেকশন ক্লাসের অনুরূপ)। ফাইল ক্লাসের সমস্ত স্ট্যাটিক মেথড সেখানে যায়। এইভাবে করা OOP-এর পরিপ্রেক্ষিতে 'আরও সঠিক'।"

"আচ্ছা, যদি এটি OOP এর পরিপ্রেক্ষিতে হয়, তাহলে ঠিক আছে। তাহলে কি পরিবর্তন হয়েছে?"

"প্রথম, তারা স্ট্রিং  এবং ফাইল অবজেক্ট ফেরত দেয় এমন পদ্ধতিগুলি পুনরুত্পাদন না করার সিদ্ধান্ত নিয়েছে  ৷ পাথ  ক্লাসে, সমস্ত পদ্ধতি একটি পথ ফেরত দেয় ৷

"দ্বিতীয়, তারা ফাইল ক্লাসে অনেক স্ট্যাটিক ইউটিলিটি পদ্ধতি স্থানান্তর করেছে ।"

"তৃতীয়, আপেক্ষিক পাথগুলির সাথে কাজ করা আরও সুবিধাজনক হয়ে উঠেছে।"

"এখানে পদ্ধতিগুলির একটি তালিকা রয়েছে:"

পাথ ক্লাসের পদ্ধতি বর্ণনা
boolean isAbsolute() পাথ পরম হলে সত্য ফিরে আসে।
Path getRoot() বর্তমান পথের রুট প্রদান করে, অর্থাৎ শীর্ষস্থানীয় ডিরেক্টরি।
Path getFileName() বর্তমান পথ থেকে ফাইলের নাম ফেরত দেয়।
Path getParent() বর্তমান পথ থেকে ডিরেক্টরি ফেরত দেয়।
boolean startsWith(Path other) বর্তমান পথটি পাস করা পথ দিয়ে শুরু হয় কিনা তা পরীক্ষা করে।
boolean endsWith(Path other) বর্তমান পথটি পাস করা পথ দিয়ে শেষ হয়েছে কিনা তা পরীক্ষা করে।
Path normalize() বর্তমান পথকে স্বাভাবিক করে তোলে। উদাহরণস্বরূপ, "c:/dir/dir2/../a.txt" কে "c:/dir/a.txt" এ রূপান্তরিত করে
Path relativize(Path other) দুটি পথের আপেক্ষিক পথ গণনা করে, অর্থাৎ "পাথের মধ্যে পার্থক্য"
Path resolve(String other) বর্তমান এবং আপেক্ষিক পাথ ব্যবহার করে একটি পরম পথ সমাধান করে।
URI toUri() বর্তমান পাথ/ফাইল হলে URI ফেরত দেয়।
Path toAbsolutePath() আপেক্ষিক হলে পথটিকে পরম পথে রূপান্তরিত করে।
File toFile() একটি ফাইল অবজেক্ট রিটার্ন করে যা বর্তমান পাথ অবজেক্টের সাথে মিলে যায়।

"এবং বর্তমান পথ - এটা কি?"

"এটি সেই পথ যা পাথ অবজেক্টের কনস্ট্রাক্টরের কাছে পাঠানো হয়েছিল যার পদ্ধতিগুলি বলা হচ্ছে।"

"ঠিক আছে। তাহলে ফাইল ক্লাসের কি পদ্ধতি আছে?"

"আপনি কি কোথাও যেতে তাড়াহুড়ো করছেন? আমি এখনই আপনাকে বলব। এখানে সবচেয়ে গুরুত্বপূর্ণ পদ্ধতি রয়েছে:"

ফাইল ক্লাসের পদ্ধতি বর্ণনা
Path createFile(…) ডিস্কে একটি ফাইল তৈরি করে।
Path createDirectory(…) একটি ডিরেক্টরি তৈরি করে।
Path createDirectories(…) একটি ডিরেক্টরি এবং এর সমস্ত সাবডিরেক্টরি তৈরি করে।
Path createTempFile(…) একটি অস্থায়ী ফাইল তৈরি করে।
Path createTempDirectory(…) একটি অস্থায়ী ডিরেক্টরি তৈরি করে।
void delete(Path path) একটি ফাইল মুছে দেয়।
Path copy(Path source, Path target,…) একটি ফাইল কপি করে।
Path move(Path source, Path target,…) একটি ফাইল সরান.
boolean isSameFile(Path, Path) দুটি ফাইল তুলনা.
boolean isDirectory(Path) পথ একটি ডিরেক্টরি?
boolean isRegularFile(Path) পথ কি একটি ফাইল?
long size(Path) ফাইলের আকার ফেরত দেয়।
boolean exists(Path) একই নামের একটি বস্তু বিদ্যমান?
boolean notExists(Path) একই নামের একটি বস্তুর অস্তিত্ব নেই?
long copy(InputStream, OutputStream) ইনপুটস্ট্রিম থেকে আউটপুট স্ট্রীমে বাইট কপি করে।
long copy(Path, OutputStream) আউটপুট স্ট্রিমের পথ থেকে সমস্ত বাইট অনুলিপি করে।
long copy(InputStream, Path) ইনপুটস্ট্রিম থেকে পাথে সমস্ত বাইট কপি করে।
byte[] read(InputStream, int initialSize) ইনপুটস্ট্রিম থেকে বাইটের একটি অ্যারে পড়ে।
byte[] readAllBytes(Path path) ইনপুটস্ট্রিম থেকে সমস্ত বাইট পড়ে।
List<String> readAllLines(Path path,..) পাঠ্য ফাইলটি পড়ে এবং স্ট্রিংগুলির একটি তালিকা প্রদান করে।
Path write(Path path, byte[] bytes,…) একটি ফাইলে বাইটের একটি অ্যারে লেখে।

"কত আকর্ষণীয়! এতগুলি দুর্দান্ত ফাংশন, এবং সব একই জায়গায়।"

"আচ্ছা দেখুন। ধরুন আপনি ইন্টারনেট থেকে একটি ফাইল ডাউনলোড করতে চান, এবং তারপর এটি কাউকে পাঠাতে চান। এটি করার জন্য, ডিস্কে একটি অস্থায়ী ফাইল তৈরি করা এবং এতে পঠিত ডেটা সংরক্ষণ করা খুবই সুবিধাজনক।"

"ইন্টারনেট থেকে একটি ফাইল ডাউনলোড করা কি কঠিন?"

"এটি খুব সহজ। এই উদাহরণটি দেখুন:"

কোড
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"এবং এটাই?"

"হ্যাঁ, আপনি কি দেখতে আশা করেছিলেন? মাত্র 4 লাইন আছে।"

" লাইন 1.  একটি URL অবজেক্ট তৈরি করে, যেখানে ইমেজ ফাইলের URL পাস করা হয়৷

" লাইন 2.  একটি ফাইল পড়ার জন্য একটি স্ট্রীম (ইনপুটস্ট্রিম) url অবজেক্টে খোলা হয়৷

" লাইন 3.  পদ্ধতিটি createTempFileএকটি অস্থায়ী ফাইল তৈরি করতে ব্যবহৃত হয়।

" লাইন 4।  Files.copy পদ্ধতিটি থেকে ডেটা কপি করে  inputStream । tempFileএটাই।"

"বুদ্ধিমান!"

"দারুণ। আমি আনন্দিত যে আপনি এটি পছন্দ করেছেন। আমি মনে করি আপনি নিজেই বাকি পদ্ধতিগুলি বের করতে পারবেন। এবং আমি দিয়েগোকে সেগুলি সম্পর্কে আপনাকে বেশ কয়েকটি কাজ দিতে বলব।"

"প্রসঙ্গক্রমে, এখানে এই উপাদানটির একটি ভাল লিঙ্ক রয়েছে"