Directory Navigation in Java | TechRepublic
हम चर्चा करते हैं कि निर्देशिकाओं, उप-निर्देशिकाओं के साथ कैसे काम करें और जावा और डायरेक्टरीस्ट्रीम विधि का उपयोग करके उन्हें कैसे पार करें। और अधिक जानें।
निर्देशिका एक संगठनात्मक फ़ाइल सिस्टम संरचना है जिसमें फ़ाइलें और अन्य निर्देशिकाएँ शामिल होती हैं। जावा किसी निर्देशिका को पार करने के कुछ तरीके प्रदान करता है, यह इस पर निर्भर करता है कि आप किस संस्करण का उपयोग कर रहे हैं, जिसमें शामिल हैं:
- का उपयोग सूचीफ़ाइलें() फ़ाइल वर्ग की विधि
- इसका उपयोग करना डायरेक्टरीस्ट्रीम जावा 7 और उसके बाद में
- स्थैतिक का उपयोग करना फ़ाइलें.सूची() जावा 8 और उसके बाद की विधि
- का उपयोग टहलना() जावा 8 और उसके बाद की विधि
यह प्रोग्रामिंग ट्यूटोरियल दिखाएगा कि जावा में निर्देशिका संरचना को नेविगेट करने के लिए उपरोक्त प्रत्येक तकनीक का उपयोग कैसे करें।
देखना: शीर्ष जावा आईडीई
जावा में फ़ाइल listFiles() विधि
सूचीफ़ाइलें() की एक उदाहरण विधि है java.io.फ़ाइल कक्षा। इसका उपयोग करने के लिए, डेवलपर्स को बस एक नया इंस्टेंट करना होगा फ़ाइल कंस्ट्रक्टर को पथ प्रदान करके ऑब्जेक्ट बनाएं और फिर इनवॉक करें सूचीफ़ाइलें() इस पर। सूचीफ़ाइलें() की एक सरणी लौटाता है फ़ाइल ऑब्जेक्ट जिन्हें प्रोग्रामर व्यक्तिगत फ़ाइलों के बारे में अधिक जानकारी प्राप्त करने और/या उन पर संचालन करने के लिए पुनरावृत्त कर सकते हैं। यहां एक बुनियादी उदाहरण दिया गया है जो विंडोज़ में सभी फ़ाइलों और निर्देशिकाओं को सूचीबद्ध करता है “सी:\मेरे दस्तावेज़” फ़ोल्डर:
package com.developer; import java.io.File; public class ListFilesExample { public static void main(String[] args) { // Store the name of files and directories // in an array of Files. // Don't forget to escape the backslash character! File[] files = new File("C:\\My Documents").listFiles(); // Traverse through the files array for (File file : files) { // If a subdirectory is found, // print the name of the subdirectory if (file.isDirectory()) { System.out.println("Directory: " + file.getName()); } else { // Print the file name System.out.println("File: " + file.getName()); } } } }
यहां पाई गई निर्देशिकाओं और फ़ाइलों की आंशिक सूची दी गई है:
Directory: AAMS Directory: Addictive Drums Directory: Angular Directory: angular-starter Directory: Any Video Converter Directory: articles File: Avatar - House Of Eternal Hunt - transposed.tg File: Avatar - House Of Eternal Hunt.tg File: Avatar - Legend Of The King.tg Directory: bgfx
जावा में पुनरावर्ती निर्देशिका ट्रैवर्सल
चूँकि हम निर्देशिकाओं के लिए परीक्षण कर सकते हैं, हम अपने लूप को एक अलग विधि में ले जा सकते हैं जिसे हम उपनिर्देशिकाओं की फ़ाइलों के साथ-साथ हमारी विधि में प्रदान की गई फ़ाइलों को सूचीबद्ध करने के लिए पुनरावर्ती रूप से लागू कर सकते हैं, जैसा कि निम्नलिखित जावा कोड उदाहरण में दिखाया गया है:
package com.developer; import java.io.File; public class RecursiveListFilesExample { public static void main(String[] args) { listFilesInDirectory(new File("C:\\My Documents")); } private static void listFilesInDirectory(File dirPath) { File filesList[] = dirPath.listFiles(); // Traverse through the files array for (File file : filesList) { // If a sub directory is found, // print the name of the sub directory if (file.isDirectory()) { System.out.println("Directory: " + file.getName()); listFilesInDirectory(file); } else { // Print the file name present in given path System.out.println("File: " + file.getName()); } } } }
हम प्रोग्राम आउटपुट में देख सकते हैं कि यह अब उपनिर्देशिकाओं की फ़ाइलों को भी सूचीबद्ध कर रहा है:
Directory: AAMS File: AAMS V3 Manual.pdf File: AAMS V4 Setup.exe File: AAMS.xml File: Licence.txt File: Version.txt Directory: Addictive Drums Directory: Settings File: MidifileDatabaseCache.dat File: Recent.dat
देखना: जावा सीखने के लिए शीर्ष ऑनलाइन जावा पाठ्यक्रम
जावा के साथ फ़ाइलों के माध्यम से लूप करने के लिए डायरेक्टरीस्ट्रीम का उपयोग करना
जावा 7 ने इसका एक विकल्प पेश किया सूचीफ़ाइलें() बुलाया डायरेक्टरीस्ट्रीम. यह for-each निर्माण के साथ अच्छी तरह से काम करता है, जिससे हमें एक ही बार में सब कुछ पढ़ने के बजाय निर्देशिका की सामग्री पर पुनरावृति करने की अनुमति मिलती है।
नीचे दिया गया उदाहरण कोड दिखाता है कि जावा का उपयोग कैसे करें डायरेक्टरीस्ट्रीम किसी निर्देशिका की फ़ाइलों को सूचीबद्ध करने की विधि में:
public Set<String> listFilesUsingDirectoryStream(String dir) throws IOException { Set<String> fileSet = new HashSet<>(); try (DirectoryStream<Path> stream = Files.newDirectoryStream( Paths.get(dir))) { for (Path path : stream) { if (!Files.isDirectory(path)) { fileSet.add(path.getFileName() .toString()); } } } return fileSet; }
ऊपर, हमने जावा को समापन को संभालने दिया डायरेक्टरीस्ट्रीम प्रयास-के-संसाधन निर्माण के माध्यम से संसाधन। हम स्थैतिक को नियोजित कर सकते हैं Files.isDirectory(पथ) निर्देशिकाओं को फ़िल्टर करने और वापस लौटाने की विधि तय करना फ़ोल्डर में फ़ाइलों की.
स्थिर Files.list() विधि का उपयोग करना
जावा 8 ने एक नया परिचय दिया सूची() विधि में java.nio.फ़ाइल.फ़ाइलें. सूची विधि एक आलसी आबादी लौटाती है धारा निर्देशिका में प्रविष्टियों की. इस प्रकार, यह बड़े फ़ोल्डरों को संसाधित करने के लिए अधिक कुशल है। यहां एक विधि है जो रिटर्न देती है तय करना फ़ाइल नामों का:
public Set<String> listFilesUsingFilesList(String dir) throws IOException { try (Stream<Path> stream = Files.list(Paths.get(dir))) { return stream .filter(file -> !Files.isDirectory(file)) .map(Path::getFileName) .map(Path::toString) .collect(Collectors.toSet()); } }
हालाँकि उपरोक्त कोड समान दिख सकता है सूचीफ़ाइलें()यह इस बात में भिन्न है कि डेवलपर्स प्रत्येक फ़ाइल का पथ कैसे प्राप्त करते हैं।
फिर से, हमने इसका उपयोग करके स्ट्रीम बनाई संसाधनों के साथ प्रयास करें यह सुनिश्चित करने के लिए निर्माण करें कि स्ट्रीम पढ़ने के बाद निर्देशिका संसाधन बंद है।
जावा में निर्देशिका सामग्री पर कैसे चलें
टहलना() विधि रिटर्न a धारा किसी दिए गए शुरुआती फ़ाइल/निर्देशिका से शुरू होने वाले फ़ाइल ट्री को गहराई-पहले तरीके से चलाकर (जिसका अर्थ है कि यह फ़ाइल/निर्देशिका से सबसे बड़ी गहराई पर शुरू होता है)। निम्नलिखित प्रोग्राम पूर्ण फ़ाइल ट्री के लिए पूर्ण फ़ाइल पथ प्रिंट करता है “सी:\मेरे दस्तावेज़”:
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; class FilesWalkExample { public static void main(String[] args) throws IOException { // Create a try-catch block and // provide the directory path of local machine try (Stream<Path> filepath = Files.walk(Paths.get("C:\\My Documents"))) { // Print the entire path of directories and files filepath.forEach(System.out::println); } // Throw an if directory doesn't exists catch (IOException e) { throw new IOException("Directory not found!"); } } }
आउटपुट की पहली कुछ पंक्तियाँ पुष्टि करती हैं कि फ़ाइल ट्रैवर्सल सबसे बड़ी गहराई से शुरू हुआ:
I:\My Documents\Angular\my-app\node_modules\selenium-webdriver\ lib\test\data\proxy I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\proxy\page1.html I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\proxy\page2.html I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\proxy\page3.html I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\readOnlyPage. html I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\rectangles.html I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\Redirect.aspx I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\Redirect.aspx.cs I:\My Documents\Angular\my-app\node_ modules\selenium-webdriver\ lib\test\data\resultPage.html
हम निर्देशिकाओं को हटाकर भी शामिल कर सकते हैं फ़ाइलें:: नियमित फ़ाइल है फ़िल्टर की स्थिति.
जावा में डायरेक्ट्री नेविगेशन पर अंतिम विचार
जावा किसी निर्देशिका को पार करने के कुछ तरीके प्रदान करता है, यह इस पर निर्भर करता है कि आप किस संस्करण का उपयोग कर रहे हैं। हालाँकि हमने मुख्य को कवर किया है, जावा में निर्देशिकाओं को नेविगेट करने के अन्य तरीके भी हैं, खासकर जब से स्ट्रीम एपीआई जावा 8 में पेश किया गया था।
देखना: मेवेन बिल्ड ऑटोमेशन टूल समीक्षा