2013-02-15 48 views
13

मेरे पास जावा 6 में लिखा गया कुछ फ़ाइल I/0 ट्रैवर्सल कोड है, इसे जावा 7 में नया I/O स्थानांतरित करने का प्रयास कर रहा है, लेकिन मुझे इस तरह की सामग्री के लिए कोई प्रतिस्थापन नहीं मिल रहा है।जावा 7 में एनओओ के साथ File.listFiles (FileFilter फ़िल्टर) को कैसे बदलें?

File[] files = dir.listFiles(AudioFileFilter.getInstance()); 

अर्थात्, पथ फिल्टर करने के लिए कोई रास्ता नहीं है केवल फ़ाइलें, और यह फ़ाइलों की सूची देता है तो मैं तो पथ (file.toPath) के लिए प्रत्येक फ़ाइल को रूपांतरित करने अगर मैं तरीकों में फ़ाइल के उपयोग को सीमित करना चाहते थे होता यह कॉल करता है, जो कि श्रमिक लगता है।

मैंने फ़ाइलविजिटर को देखा लेकिन यह आपको यह नियंत्रित करने की अनुमति नहीं देता कि पेड़ कैसे घुमाया जाता है, इसलिए मुझे लगता है कि यह मेरे लिए काम करेगा।

तो जावा 7 में फ़ाइल के लिए पथ कितना प्रतिस्थापन है?

उत्तर

22

Files#newDirectoryStream और DirectoryStream.Filter

यहाँ का उपयोग कोड है:

DirectoryStream<Path> stream = Files.newDirectoryStream(dir, new DirectoryStream.Filter<Path>() { 

     @Override 
     public boolean accept(Path entry) throws IOException 
     { 
      return Files.isDirectory(entry); 
     } 
    }); 

for (Path entry: stream) { 
     ... 
} 

Btw, मैं अपवाद सादगी के लिए उपरोक्त कोड में से निपटने के छोड़े गए।

+0

आह जो मुझे याद करता है, धन्यवाद। –

+0

यद्यपि यदि आप फ़ाइलों की सूची को किसी अन्य विधि में पास करना चाहते हैं (जो मैं फ़ाइलों को एक अलग थ्रेड पर संसाधित करता हूं) बिट गड़बड़ है कि आप फ़ाइलों के चारों ओर पुनरावृत्त करते हैं और उन्हें एक सूची में जोड़ने के बजाय –

+0

सूची को पारित करने के बजाय आप बस दूसरी विधि को स्ट्रीम पास करें। बेशक, इस पर निर्भर करता है कि आप पैरामीटर प्रकार के तरीके को नियंत्रित करते हैं या नहीं। यदि आप बिल्कुल सही नहीं हैं, तो यह सामग्री सूची को अन्य सूची संरचना में जोड़ने के लिए एक सूची संरचना को फिर से शुरू करने के लिए बहुत अधिक समझ में नहीं आता है। – Silwing