1. Filesवर्ग

फ़ाइलें वर्ग

फाइलों के साथ काम करने के लिए, एक चालाक उपयोगिता वर्ग है — java.nio.file.Files. इसमें हर मौके के लिए तरीके हैं। इस वर्ग के सभी तरीके स्थिर हैं और पाथ ऑब्जेक्ट पर काम करते हैं। बहुत सारे तरीके हैं, इसलिए हम केवल सबसे महत्वपूर्ण पर विचार करेंगे:

तरीका विवरण
Path createFile(Path path)
एक नई फाइल बनाता है जिसका पथ हैpath
Path createDirectory(Path path)
एक नई निर्देशिका बनाता है
Path createDirectories(Path path)
कई निर्देशिका बनाता है
Path createTempFile(prefix, suffix)
एक अस्थायी फ़ाइल बनाता है
Path createTempDirectory(prefix)
एक अस्थायी निर्देशिका बनाता है
void delete(Path path)
फ़ाइल या निर्देशिका खाली होने पर उसे हटा देता है
Path copy(Path src, Path dest)
एक फ़ाइल की प्रतिलिपि बनाता है
Path move(Path src, Path dest)
एक फ़ाइल ले जाएँ
boolean isDirectory(Path path)
जांचता है कि पथ एक निर्देशिका है और फ़ाइल नहीं है
boolean isRegularFile(Path path)
जाँचता है कि क्या पथ एक फ़ाइल है और निर्देशिका नहीं है
boolean exists(Path path)
जाँचता है कि दिए गए पथ पर कोई वस्तु मौजूद है या नहीं
long size(Path path)
फ़ाइल का आकार लौटाता है
byte[] readAllBytes(Path path)
फ़ाइल की संपूर्ण सामग्री को बाइट्स की एक सरणी के रूप में लौटाता है
String readString(Path path)
फ़ाइल की संपूर्ण सामग्री को एक स्ट्रिंग के रूप में लौटाता है
List<String> readAllLines(Path path)
फ़ाइल की संपूर्ण सामग्री को स्ट्रिंग्स की सूची के रूप में लौटाता है
Path write(Path path, byte[])
फ़ाइल में बाइट्स की एक सरणी लिखता है
Path writeString(Path path, String str)
फ़ाइल में एक स्ट्रिंग लिखता है
DirectoryStream<Path> newDirectoryStream(Path dir)
दी गई निर्देशिका से फ़ाइलों (और उपनिर्देशिकाओं) का संग्रह लौटाता है

2. फ़ाइलें और निर्देशिकाएँ बनाना

फ़ाइलें और निर्देशिकाएँ बनाना बहुत आसान है। आइए कुछ उदाहरणों से खुद को समझाते हैं:

कोड टिप्पणी
Files.createFile(Path.of("c:\\readme.txt"));
फाइल बनाता है
Files.createDirectory(Path.of("c:\\test"));
डायरेक्टरी बनाता है
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
यदि वे मौजूद नहीं हैं तो एक निर्देशिका और सभी आवश्यक उपनिर्देशिकाएँ बनाता है।

3. प्रतिलिपि बनाना, स्थानांतरित करना और हटाना

फ़ाइलों को कॉपी करना, ले जाना और हटाना उतना ही आसान है। यह निर्देशिकाओं पर भी लागू होता है, लेकिन वे खाली होनी चाहिए।

कोड टिप्पणी
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
एक फ़ाइल की प्रतिलिपि बनाता है
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
किसी फ़ाइल को ले जाता है और उसका नाम बदल देता है
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
एक फ़ाइल हटा देता है

4. फ़ाइल के प्रकार और अस्तित्व की जाँच करना

जब आपके पास किसी और द्वारा प्रदान किया गया पथ है, तो आप जानना चाहते हैं कि यह फ़ाइल है या निर्देशिका है। और सामान्य तौर पर, ऐसी फ़ाइल/निर्देशिका मौजूद है या नहीं?

इसके लिए खास तरीके भी हैं। आप किसी फ़ाइल की लंबाई का भी आसानी से पता लगा सकते हैं:

कोड टिप्पणी
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. फ़ाइल सामग्री के साथ कार्य करना

अंत में, विधियों की एक पूरी श्रृंखला है जो किसी फ़ाइल की सामग्री को पढ़ना या लिखना आसान बनाती है। उदाहरण:

कोड विवरण
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

फ़ाइल की सामग्री को स्ट्रिंग्स की सूची के रूप में पढ़ें।

तार प्रदर्शित करें


6. एक निर्देशिका की सामग्री प्राप्त करना

सबसे दिलचस्प तरीका अभी बाकी है। इसका उपयोग किसी दिए गए निर्देशिका में फ़ाइलें और उपनिर्देशिका प्राप्त करने के लिए किया जाता है।

हम उस newDirectoryStream()विधि के बारे में बात कर रहे हैं जो एक विशेष DirectoryStream<Path>वस्तु को वापस करती है। इसमें एक पुनरावर्तक (!) है जिसका उपयोग आप किसी दिए गए निर्देशिका की सभी फाइलों और उपनिर्देशिकाओं को प्राप्त करने के लिए कर सकते हैं।

यह सुनने में जितना आसान लगता है, उससे कहीं ज्यादा आसान है।

कोड विवरण
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


फ़ाइलों की सूची के साथ ऑब्जेक्ट प्राप्त करें
फ़ाइलों की सूची पर लूप करें

वस्तु DirectoryStream<Path>के दो गुण होते हैं। सबसे पहले, इसमें एक पुनरावर्तक है जो फ़ाइल पथ लौटाता है, और हम इस ऑब्जेक्ट को for-eachलूप के अंदर उपयोग कर सकते हैं।

और दूसरा, यह ऑब्जेक्ट एक डेटा स्ट्रीम है, इसलिए इसे close()विधि का उपयोग करके स्पष्ट रूप से बंद किया जाना चाहिए, या try-with-resourcesब्लॉक के अंदर घोषित उपयोग किया जाना चाहिए।



7. Files.newInputStreamविधि

जावा 5 से शुरू होकर, FileInputStreamऔर FileOutputStreamकक्षाओं को पदावनत कर दिया गया है। उनका एक नुकसान यह था कि जब इन वर्गों के ऑब्जेक्ट बनाए जाते हैं, तो डिस्क पर तुरंत फाइलें बनाई जाती हैं। और फ़ाइल निर्माण से संबंधित सभी अपवाद संभावित रूप से फेंके जा सकते हैं।

बाद में इसे सर्वश्रेष्ठ निर्णय नहीं माना गया। java.nio.Filesतदनुसार, फ़ाइल ऑब्जेक्ट बनाने के लिए उपयोगिता वर्ग के तरीकों का उपयोग करने की अनुशंसा की जाती है ।

फ़ाइलें बनाने के लिए पुराने दृष्टिकोण और नए दृष्टिकोण के बीच तुलना यहां दी गई है:

पहले
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
बाद
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

और इसके लिए एक समान प्रतिस्थापन है FileOutputStream:

पहले
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
बाद
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );