जावा निर्देशिकासेपुनरावर्तीफ़ाइलों की खोज करें
जावा इसके बाद, मैं एक नमूना प्रोग्राम प्रस्तुत करूंगा जो एक निर्दिष्ट निर्देशिका में, उसकी उपनिर्देशिकाओं सहित, फ़ाइलों की पुनरावर्ती रूप से खोज करता है और खोज मानदंडों से मेल खाने वाली फ़ाइलों की एक सूची प्राप्त करता है।
ये कमांड UNIX कमांड `ls -R` और Windows कमांड `dir /s` के समान ही कार्य करते हैं।
इसके अतिरिक्त, आप खोज के लिए फ़ाइल नामों में वाइल्डकार्ड कैरेक्टर के रूप में * निर्दिष्ट कर सकते हैं, या अपनी खोज के लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं।
उपयोग के एक उदाहरण के रूप में, निम्नलिखित मामले में, `filelist` निर्देशिका को उसकी उपनिर्देशिकाओं सहित पुनरावर्ती रूप से खोजा जाता है, और `.java` एक्सटेंशन वाली फ़ाइलों की एक सूची प्राप्त की जाती है।
फ़ाइल[] फ़ाइलें = खोज.लिस्टफ़ाइलें(“C:/फ़ाइलसूची/”, “*.java”);
नमूना कार्यक्रम
/**
*
*/
सार्वजनिक वर्ग फ़ाइल खोज {
पब्लिक स्टैटिक फाइनल इंट टाइप_फाइल_या_डायरेक्ट्री = 1;
पब्लिक स्टैटिक फाइनल इंट टाइप_फाइल = 2;
पब्लिक स्टैटिक फाइनल इंट TYPE_DIR = 3;
/**
* निर्दिष्ट निर्देशिका [directoryPath] से,
* लक्ष्य फ़ाइल [फ़ाइलनाम] के लिए पुनरावर्ती रूप से खोजें और मिलान ढूंढें
* फ़ाइल ऑब्जेक्ट की एक सूची लौटाता है।
*
* उदाहरण)
* फ़ाइल[] फ़ाइलें = सूची फ़ाइलें(“C:/filelist/”, “*.java”);
* ऊपर दिए गए उदाहरण में, डायरेक्टरी फाइललिस्ट को रिकर्सिवली खोजा जाता है।
* .java एक्सटेंशन वाली फ़ाइलों की सूची प्राप्त करता है।
*
* @param directoryPath खोजे जाने वाले डायरेक्टरी का पथ।
* @param fileName खोज के लिए फ़ाइल का नाम
आप फ़ाइल नाम में वाइल्डकार्ड कैरेक्टर के रूप में * निर्दिष्ट कर सकते हैं।
* @return खोज से मेल खाने वाला फ़ाइल ऑब्जेक्ट
*/
पब्लिक फाइल[] लिस्टफाइल्स(स्ट्रिंग डायरेक्टरीपाथ, स्ट्रिंग फाइलनेम) {
// वाइल्डकार्ड कैरेक्टर के रूप में * को रेगुलर एक्सप्रेशन में बदलें
यदि (फ़ाइलनाम != null) {
fileName = fileName.replace(“.”, “\\.”);
fileName = fileName.replace(“*”, “.*”);
}
return listFiles(directoryPath, fileName, TYPE_FILE, true, 0);
}
/**
* निर्दिष्ट निर्देशिका [directoryPath] से, निर्दिष्ट नियमित अभिव्यक्ति
* लक्ष्य फ़ाइल [फ़ाइलनामपैटर्न] के लिए पुनरावर्ती रूप से खोजें,
* मिलान करने वाले फ़ाइल ऑब्जेक्ट की एक सूची लौटाता है।
*
* इसके अतिरिक्त, आप यह जांच करके खोज कर सकते हैं कि क्या फ़ाइल की संशोधन तिथि मूल संशोधन तिथि से निर्दिष्ट दिनों की संख्या से अधिक है।
आप इसे निर्दिष्ट कर सकते हैं।
*
* उदाहरण)
* फ़ाइल[] फ़ाइलें =
* listFiles(“C:/filelist/”, “*.java”,TYPE_FILE, true, 2);
* ऊपर दिए गए उदाहरण में, डायरेक्टरी फ़ाइललिस्ट को रिकर्सिवली खोजा जाता है और केवल उन्हीं फ़ाइलों को दिखाने के लिए अपडेट किया जाता है जिन्हें 7 दिन पहले या उसके बाद अपडेट किया गया हो।
* .java एक्सटेंशन वाली फ़ाइलों की सूची प्राप्त करता है।
*
* @param directoryPath खोजे जाने वाले डायरेक्टरी का पथ।
* @param fileNamePattern खोज के लिए फ़ाइल नाम [नियमित अभिव्यक्ति]
* @param type संबंधित फ़ाइल ऑब्जेक्ट [type] द्वारा निर्धारित किया जाता है,
* निम्न विकल्प उपलब्ध हैं:
* TYPE_FILE_OR_DIR... फ़ाइलें और निर्देशिकाएँ
* टाइप_फाइल... फ़ाइल
* TYPE_DIR...डायरेक्टरी
* @param isRecursive: यदि आप पुनरावर्ती रूप से खोजना चाहते हैं तो इसे true पर सेट करें।
* @param period खोज का लक्ष्य वे फ़ाइलें हैं जिनकी संशोधन तिथि निर्दिष्ट संख्या में दिनों से अधिक हो गई है।
* आप यह कॉन्फ़िगर कर सकते हैं कि यह सुविधा चालू है या नहीं।
* यदि 0 है, तो यह लागू नहीं होता है।
* यदि संख्या 1 या उससे अधिक है, तो निर्दिष्ट दिनों की संख्या से आगे की फाइलें खोज में शामिल की जाएंगी।
* यदि -1 या उससे कम है, तो निर्दिष्ट दिनों की संख्या से पुरानी फाइलें खोज में शामिल की जाएंगी।
* @return खोज से मेल खाने वाला फ़ाइल ऑब्जेक्ट
*/
पब्लिक फ़ाइल[] लिस्टफ़ाइल्स(स्ट्रिंग डायरेक्टरीपाथ,
स्ट्रिंग फ़ाइलनामपैटर्न, इंट प्रकार,
बूलियन isRecursive, int period) {
File dir = new File(directoryPath);
यदि (!dir.isDirectory()) {
throw new IllegalArgumentException
(आर्गुमेंट द्वारा निर्दिष्ट पथ [" + dir.getAbsolutePath() +
“"] एक निर्देशिका नहीं है।");
}
फ़ाइल[] फ़ाइलें = dir.listFiles();
// वह आउटपुट
for (int i = 0; i < files.length; i++) {
फ़ाइलफ़ाइल = फ़ाइलें[i];
addFile(type, fileNamePattern, set, file, period);
// पुनरावर्ती रूप से खोजें और, यदि यह एक निर्देशिका है, तो इसे पुनरावर्ती रूप से सूची में जोड़ें।
यदि (isRecursive && file.isDirectory()) {
listFiles(file.getAbsolutePath(), fileNamePattern,
प्रकार, पुनरावर्ती है, अवधि);
}
}
रिटर्न (फ़ाइल[]) सेट.टू-एरे(नई फ़ाइल[सेट.साइज़()]);
}
प्राइवेट वॉइड ऐडफ़ाइल (इंट टाइप, स्ट्रिंग मैच, ट्रीसेट सेट,
फ़ाइल फ़ाइल, int अवधि) {
स्विच (प्रकार) {
केस टाइप_फ़ाइल:
यदि (!फ़ाइल.isFile()) {
वापस करना;
}
तोड़ना;
केस TYPE_DIR:
यदि (!फ़ाइल.isDirectory()) {
वापस करना;
}
तोड़ना;
}
यदि (match != null && !file.getName().matches(match)) {
वापस करना;
}
// यदि यह जांचने के लिए कोई विनिर्देश है कि निर्दिष्ट संख्या में दिन बीत चुके हैं या नहीं।
यदि (अवधि != 0) {
// फ़ाइल संशोधन तिथि
Date lastModifiedDate = new Date(file.lastModified());
String lastModifiedDateStr = new SimpleDateFormat(“yyyyMMdd”)
.format(lastModifiedDate);
// निर्दिष्ट तिथि (एक दिन की गणना मिलीसेकंड में की जाती है)
एक दिन में कुल समय = 24 लीटर * 60 लीटर * 60 लीटर * 1000 लीटर;
लंबी अवधि = एक दिन का समय * गणितीय निरपेक्ष मान (अवधि);
दिनांक डिज़ाइन तिथि =
नई दिनांक(सिस्टम.करंटटाइममिलिस() – पीरियडटाइम);
String designatedDateStr = new SimpleDateFormat(“yyyyMMdd”)
.format(निर्दिष्ट तिथि);
यदि (अवधि > 0) {
यदि (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
वापस करना;
}
अन्य {
यदि (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
वापस करना;
}
}
}
// सभी शर्तें पूरी होने पर सूची में स्टोर करें
सेट.ऐड(फ़ाइल);
}
/** ट्रीसेट का उपयोग करके वर्णानुक्रम में सॉर्ट करें। */
private TreeSet set = new TreeSet();
/**
* यदि आप इंस्टेंस बनाने के बाद उसे दोबारा उपयोग करना चाहते हैं, तो इस विधि का उपयोग करें।
* कॉल को क्लियर करने की आवश्यकता है।
* उदाहरण)
* FileSearch search = new FileSearch();
* फ़ाइल[] f1 = खोज.listFiles(C:/filelist/”, “*.java”);
* खोज.स्पष्ट करें();
* फ़ाइल[] f2 = खोज.listFiles(“C:/filelist/”, “*.jsp”);
*/
सार्वजनिक शून्य क्लियर(){
साफ़ करें();
}
}
निष्पादन परिणाम
नमूना प्रोग्राम को सत्यापित करने के लिए, मैंने `filelist` नामक एक निर्देशिका बनाई और निम्नलिखित फाइलें तैयार कीं।
फ़ाइल का नाम और संशोधन तिथि प्रदर्शित की जाती है।
*ध्यान दें कि वर्तमान तिथि है2007/08/18मान लेते हैं कि यही स्थिति है।
C:\filelist │ aaa.java 2007/08/18 │ bbb.java 2007/08/18 └─dir ccc.java 2007/07/17 ddd.java 2007/08/18 eee.jpg 2007/08/16
◆उदाहरण
System.out.println("\n●सभी फ़ाइलें प्राप्त करें");
फ़ाइल[] फ़ाइलें = खोज.लिस्टफ़ाइलें(पथ, शून्य);
प्रिंटफाइललिस्ट(फाइलें);
खोज.स्पष्ट करें();
System.out.println("\n● .java एक्सटेंशन वाली फ़ाइलें प्राप्त करें");
फ़ाइलें = खोज.सूचीफ़ाइलें(पथ, “*.java”);
प्रिंटफाइललिस्ट(फाइलें);
खोज.स्पष्ट करें();
System.out.println("\n●सभी फ़ाइलें और निर्देशिकाएँ प्राप्त करें");
फ़ाइलें = खोज.listFiles(पथ, null, खोज.TYPE_FILE_OR_DIR, सही, 0);
प्रिंटफाइललिस्ट(फाइलें);
खोज.स्पष्ट करें();
System.out.println("\n●वर्तमान तिथि से दो दिन पहले या उससे अधिक समय पहले अपडेट की गई फ़ाइलों को पुनः प्राप्त करें");
फ़ाइलें = खोज.listFiles(पथ, null, खोज.TYPE_FILE, सही, 2);
प्रिंटफाइललिस्ट(फाइलें);
खोज.स्पष्ट करें();
System.out.println("\n●वर्तमान तिथि से 30 दिन पहले या उससे पहले की पुरानी फ़ाइलें पुनर्प्राप्त करें");
फ़ाइलें = खोज.listFiles(पथ, शून्य, खोज.TYPE_FILE, सत्य, -30);
प्रिंटफाइललिस्ट(फाइलें);
खोज.स्पष्ट करें();
}
निजी स्थैतिक शून्य प्रिंटफाइललिस्ट(फाइल[] फाइल्स) {
for (int i = 0; i < files.length; i++) {
फ़ाइलफ़ाइल = फ़ाइलें[i];
System.out.println((i + 1) + “: ” + फ़ाइल);
}
}
◆आउटपुट परिणाम
●सभी फ़ाइलें प्राप्त करें 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc.java 4: C:\filelist\dir\ddd.java 5: C:\filelist\dir\eee.jpg ● .java एक्सटेंशन वाली फ़ाइलें प्राप्त करें 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc.java 4: C:\filelist\dir\ddd.java ●सभी फ़ाइलें और निर्देशिका प्राप्त करें 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir 4: C:\filelist\dir\ccc.java 5: C:\filelist\dir\ddd.java 6: C:\filelist\dir\eee.jpg ● वर्तमान तिथि से 2 दिन पहले से शुरू होने वाली अद्यतन फ़ाइलें प्राप्त करें: 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ● वर्तमान तिथि से 30 दिन पहले या उससे पहले की पुरानी फ़ाइलें प्राप्त करें: 1: C:\filelist\dir\ccc.java
