2011-02-07 8 views
77

संभव डुप्लिकेट:
Best way to iterate through a directory in java?जावा में किसी निश्चित निर्देशिका की फ़ाइलों पर पुनरावृत्ति कैसे करें?

मैं जावा का उपयोग कर एक निश्चित निर्देशिका में प्रत्येक फ़ाइल पर कार्रवाई करना चाहते हैं।

ऐसा करने का सबसे आसान (और सबसे आम) तरीका क्या है?

+2

डुप्लिकेट की: http://stackoverflow.com/questions/3154488/best-way-to-iterate-through-a-directory-in-java – Olhovsky

उत्तर

139

आप myDirectoryPath में निर्देशिका नाम है,

import java.io.File; 
... 
    File dir = new File(myDirectoryPath); 
    File[] directoryListing = dir.listFiles(); 
    if (directoryListing != null) { 
    for (File child : directoryListing) { 
     // Do something with child 
    } 
    } else { 
    // Handle the case where dir is not really a directory. 
    // Checking dir.isDirectory() above would not be sufficient 
    // to avoid race conditions with another process that deletes 
    // directories. 
    } 
+1

Javado listFiles में कहते हैं(): "pathnames दर्शाने निर्देशिका स्वयं और निर्देशिका की मूल निर्देशिका परिणाम में शामिल नहीं हैं। " – pihentagy

+0

@pihentagy, मुझे यह नहीं पता था। धन्यवाद। –

+1

fyi अगर आप वर्तमान फ़ोल्डर चाहते हैं तो आप 'नई फ़ाइल ("।") का उपयोग कर सकते हैं;' – Csanesz

6

यहाँ एक उदाहरण है कि मेरे डेस्कटॉप पर सभी फाइलों को सूचीबद्ध करता है। आपको पथ पथ को अपने पथ में बदलना चाहिए।

System.out.println के साथ फ़ाइल का नाम प्रिंट करने के बजाय, आपको फ़ाइल पर काम करने के लिए अपना कोड रखना चाहिए।

public static void main(String[] args) { 
    File path = new File("c:/documents and settings/Zachary/desktop"); 

    File [] files = path.listFiles(); 
    for (int i = 0; i < files.length; i++){ 
     if (files[i].isFile()){ //this line weeds out other directories/folders 
      System.out.println(files[i]); 
     } 
    } 
} 
3

उपयोग java.io.File.listFiles
या
आप सूची यात्रा करने से पहले (या किसी भी और अधिक जटिल उपयोग के मामले) फिल्टर करने के लिए चाहते हैं, अपाचे-कॉमन्स FileUtils का उपयोग करें। FileUtils.listFiles

+0

'सूचीफाइल' को फ़ाइल फ़िल्टर या फ़ाइल नाम फ़िल्टर लेने के लिए ओवरराइड किया गया है, इसलिए अगर आप केवल एक चीज फ़िल्टर करना चाहते हैं तो अपाचे-कॉमन्स का उपयोग करने की आवश्यकता नहीं है। हालांकि यह एक अच्छी पुस्तकालय है। –

27

मुझे लगता है कि आप जो चाहते हैं उसे बनाने के कई तरीके हैं। यहां एक तरीका है जिसका मैं उपयोग करता हूं। commons.io लाइब्रेरी के साथ आप निर्देशिका में फ़ाइलों पर फिर से सक्रिय कर सकते हैं। आपको FileUtils.iterateFiles विधि का उपयोग करना होगा और आप प्रत्येक फ़ाइल को संसाधित कर सकते हैं।

आप यहाँ जानकारी पा सकते हैं: http://commons.apache.org/proper/commons-io/download_io.cgi

यहाँ एक उदाहरण है:

Iterator it = FileUtils.iterateFiles(new File("C:/"), null, false); 
     while(it.hasNext()){ 
      System.out.println(((File) it.next()).getName()); 
     } 

आप null बदल सकते हैं और अगर आप फिल्टर करना चाहते एक्सटेंशन की एक सूची रख सकते हैं। उदाहरण: {".xml",".java"}

+0

मैं तीसरे पक्ष के पुस्तकालयों का उपयोग न करने की कोशिश कर रहा था, लेकिन अपाचे की फाइलयूट में बहुत उपयोगी विधियां हैं। धन्यवाद। +1 –

+0

हां ... वास्तव में अपाचे से सभी कॉमन्स लाइब्रेरी वास्तव में अच्छे हैं, जिनमें कई सुविधाएं शामिल हैं जिन्हें हम कोड पर टेंट कर सकते हैं। Commons.collections एक और अच्छा उदाहरण है। – jomaora

+3

@ जॉन-एसिम्प्टोथ, इस lib के बिना और केवल जावा लागू किए गए उपयोग में यदि आप पुस्तकालय में बहुत सारी फाइलें हैं तो आप 'स्टैक ओवरफ्लो एरर' में ड्राइव करेंगे। (Http://java.sun.com/javase/6/docs/api/java/lang/StackOverflowError.html) – Rihards

संबंधित मुद्दे

 संबंधित मुद्दे