1. Pathক্লাস

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

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

শুরু থেকেই, আমরা Pathক্লাস ব্যবহার করে ফাইলগুলির সাথে কীভাবে কাজ করতে হয় তা শিখতে শুরু করব। Pathবর্গ যে প্রতিস্থাপিত হয় File. এটি নিরাপদ এবং আরও কার্যকর।

Pathক্লাস

প্রযুক্তিগতভাবে, Pathএকটি ক্লাস নয় - এটি একটি ইন্টারফেস। Pathপ্রতিটি অপারেটিং সিস্টেমের (এবং ফাইল সিস্টেম) জন্য ক্লাসের একজন বংশধরের লেখার অনুমতি দেওয়ার জন্য এটি করা হয় ।

ফাইল পাথ লেখার জন্য উইন্ডোজের একটি স্ট্যান্ডার্ড রয়েছে এবং লিনাক্সের আরেকটি রয়েছে। অবশ্যই, পৃথিবীতে আরও অনেক অপারেটিং সিস্টেম রয়েছে এবং প্রতিটির নিজস্ব মান রয়েছে।

এই কারণেই Pathইন্টারফেসটি ফাইলগুলির সাথে কাজ করে এমন পদ্ধতিগুলিতে সর্বত্র ব্যবহৃত হয়, যদিও বাস্তবে কাজটি তার বংশধর শ্রেণিগুলির মাধ্যমে ঘটে: WindowsPath, UnixPath, ...

একটি Pathবস্তু তৈরি করা

একটি বস্তু তৈরি করতে Path(যা প্রকৃতপক্ষে বংশধর শ্রেণীর একটি বস্তু হবে WindowsPath), আপনাকে এই মত একটি বিবৃতি ব্যবহার করতে হবে:

Path name = Path.of(path);

nameএকটি ভেরিয়েবলের নাম কোথায় Path, এবং pathফাইলের (বা ডিরেক্টরি) নাম সহ ফাইলের (বা ডিরেক্টরি) পাথ। এবং ofক্লাসের একটি স্ট্যাটিক পদ্ধতি Path

উইন্ডোজে প্রোগ্রামটি চলমান থাকলে অবজেক্ট of()তৈরি করতে পদ্ধতিটি ব্যবহার করা হয় । WindowsPathলিনাক্সে প্রোগ্রাম চলমান থাকলে UnixPathঅবজেক্ট তৈরি হয়। আপনি Pathযেমন কোড ব্যবহার করে একটি বস্তু তৈরি করতে পারবেন না ।new Path()

উদাহরণ:

কোড বিঃদ্রঃ
Path file = Path.of("c:\\projects\\note.txt");
ফাইলের পাথ
Path directory = Path.of("c:\\projects\\");
ডিরেক্টরির পথ

Pathএকটি বৈধ বস্তুর অস্তিত্বের জন্য ফাইলের (বা ডিরেক্টরি) অস্তিত্বের প্রয়োজন নেই । হয়তো আপনি শুধু একটি ফাইল তৈরি করতে চান... একটি Pathবস্তু একটি স্যুপ-আপের মতো String: এটি ডিস্কের একটি নির্দিষ্ট ফাইলের সাথে আবদ্ধ নয় - এটি কেবল ডিস্কে একটি নির্দিষ্ট পথ সংরক্ষণ করে। এটাই.


Path2. প্রকারের পদ্ধতি

ইন্টারফেসের Pathবেশ কয়েকটি আকর্ষণীয় পদ্ধতি রয়েছে। সবচেয়ে আকর্ষণীয়গুলি নীচের টেবিলে উপস্থাপন করা হয়েছে।

পদ্ধতি বর্ণনা
Path getParent()
মূল ডিরেক্টরি প্রদান করে
Path getFileName()
ডিরেক্টরি ছাড়াই ফাইলের নাম ফেরত দেয়
Path getRoot()
একটি পথ থেকে রুট ডিরেক্টরি ফেরত দেয়
boolean isAbsolute()
বর্তমান পথটি পরম কিনা পরীক্ষা করে
Path toAbsolutePath()
পথকে পরম-এ রূপান্তরিত করে
Path normalize()
একটি ডিরেক্টরির নামে ওয়াইল্ডকার্ড সরিয়ে দেয়।
Path resolve(Path other)
পরম এবং আপেক্ষিক পাথ থেকে একটি নতুন পরম পথ তৈরি করে।
Path relativize(Path other)
দুটি পরম পথ থেকে একটি আপেক্ষিক পথ পায়।
boolean startsWith(Path other)
বর্তমান পথটি একটি প্রদত্ত পথ দিয়ে শুরু হয় কিনা তা পরীক্ষা করে
boolean endsWith(Path other)
বর্তমান পথ একটি প্রদত্ত পাথ দিয়ে শেষ হয় কিনা তা পরীক্ষা করে
int getNameCount()
/একটি বিভাজক হিসাবে ব্যবহার করে পাথকে অংশে বিভক্ত করে ।
অংশের সংখ্যা প্রদান করে।
Path getName(int index)
/একটি বিভাজক হিসাবে ব্যবহার করে পাথকে অংশে বিভক্ত করে ।
এর সূচক দ্বারা একটি অংশ প্রদান করে।
Path subpath(int beginIndex, int endIndex)
/একটি বিভাজক হিসাবে ব্যবহার করে পাথকে অংশে বিভক্ত করে ।
প্রদত্ত ব্যবধানের সাথে সামঞ্জস্যপূর্ণ সাবপাথ ফেরত দেয়।
File toFile()
একটি Pathঅবজেক্টকে একটি অবরুদ্ধ Fileবস্তুতে রূপান্তর করে
URI toUri()
Pathএকটি বস্তুকে বস্তুতে URIরূপান্তরিত করে

নীচে বিদ্যমান পদ্ধতিগুলির একটি সংক্ষিপ্ত বিবরণ রয়েছে।


3. একটি পথকে অংশে বিভক্ত করা

পদ্ধতিটি getParent()সেই পথটি ফেরত দেয় যা বর্তমান পথের জন্য মূল ডিরেক্টরিতে নির্দেশ করে। নির্বিশেষে এই পথটি একটি ডিরেক্টরি বা একটি ফাইল কিনা:

কোড মান
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

পদ্ধতিটি getFileName()একটি একক ফাইল (বা ডিরেক্টরি) নাম ফেরত দেয় - যা শেষ ডিলিমিটারের পরে আসে:

কোড মান
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

পদ্ধতিটি getRoot()রুট ডিরেক্টরিতে পাথ ফেরত দেয়:

কোড মান
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. পরম এবং আপেক্ষিক পথ

দুই ধরনের পথ আছে: পরম এবং আপেক্ষিক। একটি পরম পথ রুট ডিরেক্টরি থেকে শুরু হয়। উইন্ডোজের জন্য, এটি ফোল্ডার হতে পারে c:\; লিনাক্সের জন্য - /ডিরেক্টরি

একটি আপেক্ষিক পথ কিছু ডিরেক্টরির সাথে সম্পর্কিত অর্থপূর্ণ। যে, এটা রাস্তার শেষ মত, কিন্তু শুরু ছাড়া. আপনি একটি আপেক্ষিক পথকে একটি পরম পথে এবং তদ্বিপরীত করতে পারেন

boolean isAbsolute()পদ্ধতি

পদ্ধতিটি বর্তমান পথটি পরম কিনা তা পরীক্ষা করে

কোড মান
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()পদ্ধতি

পথকে পরম রূপান্তরিত করে। যদি প্রয়োজন হয়, এতে বর্তমান কার্যকারী ডিরেক্টরি যোগ করুন:

কোড মান
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()পদ্ধতি

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

কোড মান
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)পদ্ধতি

পদ্ধতিটি relativize()আপনাকে "পাথের মধ্যে পার্থক্য" তৈরি করতে দেয়: একটি পথ অন্যটির সাথে সম্পর্কিত

কোড মান
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
অবৈধ আর্গুমেন্ট ব্যতিক্রম:
দুটি পথের একটি ভিন্ন "রুট" (ভিন্ন ডিস্ক) আছে

Path resolve(Path other)পদ্ধতি

পদ্ধতিটি resolve()এর বিপরীত করে relativize(): এটি একটি পরম এবং একটি আপেক্ষিক পথ থেকে একটি নতুন পরম পথ তৈরি করে।

কোড মান
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()পদ্ধতি

পদ্ধতিটি অবজেক্টের Fileমতো একই ফাইল পাথ সঞ্চয় করে এমন একটি অবহেলিত বস্তু ফেরত দেয় Path

toURI()পদ্ধতি

পদ্ধতিটি পাথটিকে একটি স্ট্যান্ডার্ড URI- তে রূপান্তর করে এবং ফাইলের পাথ ধারণ করে এমন একটি বস্তু ফেরত দেয়:

ফাইলের পাথ ফাইলে URI
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt