जावा निर्देशिकासेपुनरावर्तीमें फ़ाइलें खोजें
जावा यहां हम एक नमूना प्रोग्राम प्रस्तुत करते हैं जो उपनिर्देशिकाओं सहित एक निर्दिष्ट निर्देशिका में फ़ाइलों की पुनरावर्ती खोज करता है, और खोज स्थितियों से मेल खाने वाली फ़ाइलों की एक सूची प्राप्त करता है।
ये UNIX कमांड ls -R और Windows कमांड dir/s के समान ही प्रोसेसिंग करते हैं।
आप खोजे जाने वाले फ़ाइल नाम में * को वाइल्डकार्ड वर्ण के रूप में भी निर्दिष्ट कर सकते हैं, या खोजने के लिए नियमित अभिव्यक्तियों का उपयोग कर सकते हैं।
उपयोग के एक उदाहरण के रूप में, निम्नलिखित मामले में, एक्सटेंशन जावा के साथ फ़ाइलों की एक सूची प्राप्त करने के लिए निर्देशिका फ़ाइल सूची को उपनिर्देशिकाओं सहित पुनरावर्ती रूप से खोजा जाता है।
फ़ाइल[] फ़ाइलें = search.listFiles('C:/filelist/', '*.java');
नमूना कार्यक्रम
/**
*
*/
सार्वजनिक वर्ग फ़ाइल खोज {
सार्वजनिक स्थैतिक अंतिम पूर्णांक TYPE_FILE_OR_DIR = 1;
सार्वजनिक स्थैतिक अंतिम पूर्णांक TYPE_FILE = 2;
सार्वजनिक स्थैतिक अंतिम पूर्णांक TYPE_DIR = 3;
/**
* निर्दिष्ट निर्देशिका से [directoryPath],
* पुनरावर्ती रूप से खोजी जाने वाली फ़ाइल [फ़ाइल नाम] खोजें और संबंधित फ़ाइल ढूंढें।
* फ़ाइल ऑब्जेक्ट की एक सूची लौटाता है।
*
* उदाहरण)
* फ़ाइल[] फ़ाइलें =सूचीफ़ाइलें('सी:/फ़ाइललिस्ट/', '*.जावा');
* उपरोक्त उदाहरण निर्देशिका फ़ाइल सूची को पुनरावर्ती रूप से खोजता है
* जावा एक्सटेंशन वाली फाइलों की सूची प्राप्त करें।
*
* @paramdirectoryPath पथ खोज करने के लिए निर्देशिका का प्रतिनिधित्व करता है
* @param फ़ाइल नाम खोजने के लिए फ़ाइल नाम
* आप फ़ाइल नाम में * को वाइल्डकार्ड वर्ण के रूप में निर्दिष्ट कर सकते हैं।
* @रिटर्न फ़ाइल ऑब्जेक्ट खोज से मेल खाता है
*/
सार्वजनिक फ़ाइल[] सूचीफ़ाइलें(स्ट्रिंग निर्देशिकापाथ, स्ट्रिंग फ़ाइलनाम) {
// * को वाइल्डकार्ड कैरेक्टर के रूप में रेगुलर एक्सप्रेशन में बदलें
यदि (फ़ाइलनाम !=शून्य) {
फ़ाइलनाम = फ़ाइलनाम.प्रतिस्थापन(“।”, “\\.”);
फ़ाइलनाम = फ़ाइलनाम.प्रतिस्थापन('*', '.*');
}
वापसी सूची फ़ाइलें (निर्देशिका पथ, फ़ाइल नाम, TYPE_FILE, सत्य, 0);
}
/**
* निर्दिष्ट निर्देशिका [निर्देशिकापथ] से, एक नियमित अभिव्यक्ति के रूप में निर्दिष्ट
* खोजी जाने वाली फ़ाइल को पुनरावर्ती रूप से खोजें [फ़ाइलनामपैटर्न],
* लागू फ़ाइल ऑब्जेक्ट की एक सूची लौटाता है।
*
* आप खोज स्थिति का उपयोग यह निर्धारित करने के लिए भी कर सकते हैं कि फ़ाइल की अद्यतन तिथि निर्दिष्ट दिनों से अधिक हो गई है या नहीं।
*निर्दिष्ट किया जा सकता है।
*
* उदाहरण)
* फ़ाइल[] फ़ाइलें =
* सूचीफ़ाइलें('C:/फ़ाइललिस्ट/', '*.java',TYPE_FILE, सत्य, 2);
* उपरोक्त उदाहरण में, निर्देशिका फ़ाइल सूची को पुनरावर्ती रूप से खोजा जाता है और 7 दिन से कम समय पहले अपडेट किया जाता है।
* जावा एक्सटेंशन वाली फाइलों की सूची प्राप्त करें।
*
* @paramdirectoryPath पथ खोज करने के लिए निर्देशिका का प्रतिनिधित्व करता है
* @param फ़ाइलनामपैटर्न फ़ाइल नाम [नियमित अभिव्यक्ति] खोजने के लिए
* @param प्रकार संबंधित फ़ाइल ऑब्जेक्ट को [प्रकार] द्वारा निर्दिष्ट किया जाता है।
* निम्नलिखित निर्दिष्ट किया जा सकता है
* TYPE_FILE_OR_DIR・・・फ़ाइल और निर्देशिका
* प्रकार_फ़ाइल・・・फ़ाइल
* प्रकार_डीआईआर・・・निर्देशिका
* @param पुनरावर्ती रूप से खोजने के लिए पुनरावर्ती सत्य है
* @परम अवधि उन फ़ाइलों को खोजें जिनकी अद्यतन तिथि निर्दिष्ट दिनों से अधिक हो गई है।
* सेट किया जा सकता है या नहीं
* यदि 0 हो तो लागू नहीं
* यदि 1 या अधिक है, तो निर्दिष्ट दिनों के बाद फ़ाइलें खोजें
* यदि -1 से कम है, तो निर्दिष्ट दिनों से अधिक पुरानी फ़ाइलें खोजें
* @रिटर्न फ़ाइल ऑब्जेक्ट खोज से मेल खाता है
*/
सार्वजनिक फ़ाइल[] सूचीफ़ाइलें(स्ट्रिंग निर्देशिकापथ,
स्ट्रिंग फ़ाइलनामपैटर्न, पूर्णांक प्रकार,
बूलियन पुनरावर्ती है, पूर्णांक अवधि) {
फ़ाइल dir = नई फ़ाइल (निर्देशिकापथ);
अगर (!dir.isDirectory()) {
नया IllegalArgumentException फेंकें
("तर्क में निर्दिष्ट पथ[" + dir.getAbsolutePath() +
"] एक निर्देशिका नहीं है।");
}
फ़ाइल[] फ़ाइलें = dir.listFiles();
// इसका आउटपुट
के लिए (int i = 0; i <files.length; i++) {
फ़ाइल फ़ाइल = फ़ाइलें[i];
addFile(प्रकार, फ़ाइलनामपैटर्न, सेट, फ़ाइल, अवधि);
// पुनरावर्ती रूप से खोजें और यदि यह एक निर्देशिका है तो पुनरावर्ती रूप से सूची में जोड़ें
यदि (isRecursive && file.isDirectory()) {
सूचीफ़ाइलें(फ़ाइल.getAbsolutePath(), फ़ाइलनामपैटर्न,
प्रकार, पुनरावर्ती है, अवधि);
}
}
वापसी (फ़ाइल[]) set.toArray(नई फ़ाइल[सेट.आकार()]);
}
निजी शून्य ऐडफ़ाइल (int प्रकार, स्ट्रिंग मिलान, ट्रीसेट सेट,
फ़ाइल फ़ाइल, पूर्णांक अवधि) {
स्विच (प्रकार) {
मामला प्रकार_फ़ाइल:
यदि (!फ़ाइल.isFile()) {
वापस करना;
}
तोड़ना;
मामला TYPE_DIR:
यदि (!file.isDirectory()) {
वापस करना;
}
तोड़ना;
}
यदि (मैच != शून्य && !file.getName().मैच(मैच)) {
वापस करना;
}
// यदि कोई विनिर्देश है कि क्या निर्दिष्ट दिन बीत चुके हैं
यदि (अवधि != 0) {
// फ़ाइल अद्यतन दिनांक
दिनांक LastModifiedDate = नई दिनांक(फ़ाइल.lastModified());
स्ट्रिंग LastModifiedDateStr = नया SimpleDateFormat(“yyyyMMdd”)
.format(lastModifiedDate);
// निर्दिष्ट तिथि (प्रति दिन मिलीसेकंड में गणना)
लंबा एकदिवसीय समय = 24ली * 60ली * 60ली * 1000ली;
लंबी अवधिसमय = एकदिवसीय समय * गणित.abs(अवधि);
दिनांक निर्दिष्ट दिनांक =
नई तिथि(System.currentTimeMillis() – periodTime);
स्ट्रिंग निर्दिष्टDateStr = नया SimpleDateFormat(“yyyyMMdd”)
.प्रारूप(नामित दिनांक);
यदि (अवधि > 0) {
यदि (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
वापस करना;
}
} अन्य {
यदि (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
वापस करना;
}
}
}
// सभी शर्तें पूरी होने पर सूची में स्टोर करें
सेट.जोड़ें(फ़ाइल);
}
/** वर्णानुक्रम में क्रमबद्ध करने के लिए ट्रीसेट का उपयोग करें। */
निजी ट्रीसेट सेट = नया ट्रीसेट();
/**
* यदि आप इंस्टेंस बनाने के बाद उसका उपयोग जारी रखना चाहते हैं, तो इस विधि का उपयोग करें।
* कॉल साफ़ होनी चाहिए.
* उदाहरण)
* फ़ाइल खोज खोज = नई फ़ाइल खोज();
* फ़ाइल[] f1 = search.listFiles(C:/filelist/”, “*.java”);
* search.clear();
* फ़ाइल[] f2 = search.listFiles('C:/filelist/', '*.jsp');
*/
सार्वजनिक शून्य साफ़(){
साफ़ करें();
}
}
निष्पादन परिणाम
नमूना प्रोग्राम की जाँच करने के लिए, मैंने एक फ़ाइल सूची निर्देशिका बनाई और निम्नलिखित फ़ाइलें तैयार कीं।
फ़ाइल का नाम और अद्यतन दिनांक प्रदर्शित होते हैं।
*कृपया ध्यान दें कि वर्तमान तिथि क्या है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●सभी फ़ाइलें प्राप्त करें”);
फ़ाइल[] फ़ाइलें = search.listफ़ाइलें(पथ, शून्य);
प्रिंटफाइललिस्ट(फ़ाइलें);
search.clear();
System.out.println(“\n●एक्सटेंशन जावा के साथ फ़ाइल प्राप्त करें”);
फ़ाइलें = search.listफ़ाइलें(पथ, “*.java”);
प्रिंटफाइललिस्ट(फ़ाइलें);
search.clear();
System.out.println(“\n●सभी फ़ाइलें और निर्देशिकाएँ प्राप्त करें”);
फ़ाइलें = खोज.सूची फ़ाइलें(पथ, शून्य, खोज.TYPE_FILE_OR_DIR, सत्य, 0);
प्रिंटफाइललिस्ट(फ़ाइलें);
search.clear();
System.out.println(“\n●वर्तमान दिनांक से 2 दिनों के भीतर फ़ाइलें अपडेट करें”);
फ़ाइलें = खोज.सूचीफ़ाइलें(पथ, शून्य,खोज.TYPE_FILE, सत्य, 2);
प्रिंटफाइललिस्ट(फ़ाइलें);
search.clear();
System.out.println(“\n●वर्तमान दिनांक से 30 दिन से अधिक पुरानी फ़ाइलें प्राप्त करें”);
फ़ाइलें = search.listफ़ाइलें (पथ, शून्य, search.TYPE_FILE, सत्य, -30);
प्रिंटफाइललिस्ट(फ़ाइलें);
search.clear();
}
निजी स्थैतिक शून्य printFileList(फ़ाइल[] फ़ाइलें) {
के लिए (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:\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। जावा 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ●वर्तमान दिनांक 1 से 30 दिन से अधिक पुरानी पुरानी फ़ाइलें प्राप्त करें: C: \फ़ाइलसूची\dir\ccc.java