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: यह डिस्क पर किसी विशिष्ट फ़ाइल से बंधा नहीं है - यह डिस्क पर केवल एक निश्चित पथ को संग्रहीत करता है। इतना ही।


2. Pathप्रकार के तरीके

इंटरफ़ेस 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 में परिवर्तित करती है , और एक वस्तु लौटाती है जिसमें फ़ाइल का पथ होता है:

फ़ाइल का पथ फ़ाइल के लिए यूआरआई
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt