2011-08-26 11 views
71

मैं के रूप में नीचे दिए गए कोड मिल गया है:वर्णमाला क्रम में File.listFiles कैसे करें?

class ListPageXMLFiles implements FileFilter { 

     @Override 
     public boolean accept(File pathname) { 
       DebugLog.i("ListPageXMLFiles", "pathname is " + pathname); 

       String regex = ".*page_\\d{2}\\.xml"; 
       if(pathname.getAbsolutePath().matches(regex)) { 
         return true; 
       } 
       return false; 
     } 
} 

public void loadPageTrees(String xml_dir_path) { 
     ListPageXMLFiles filter_xml_files = new ListPageXMLFiles(); 
     File XMLDirectory = new File(xml_dir_path); 
     for(File _xml_file : XMLDirectory.listFiles(filter_xml_files)) { 
       loadPageTree(_xml_file); 
     } 
} 

FileFilter अच्छी तरह से काम कर रहा है, लेकिन listFiles() रिवर्स वर्णमाला के क्रम में फ़ाइलों को सूचीबद्ध किया जा रहा है। क्या वर्णमाला क्रम में फ़ाइलों को सूचीबद्ध करने के लिए listFile() बताने का कोई त्वरित तरीका है?

+0

बस मेरा जवाब संपादित किया। अब अपनी जरूरतों को पूरा करना चाहिए। –

+0

संपादन के लिए धन्यवाद, Konstantin। मैं हाल ही में एंड्रॉइड पर काम कर रहा हूं, और उस विवरण ने मेरे दिमाग को फिसल दिया। ;-) –

+0

रेगेक्स का उपयोग करने के बजाय, '.endsWith ("। Xml")' का उपयोग करें। – Fred

उत्तर

176

listFiles विधि, फ़िल्टर के साथ या बिना किसी आदेश की गारंटी नहीं देता है।

हालांकि, यह एक सरणी लौटाता है, जिसे आप Arrays.sort() से सॉर्ट कर सकते हैं।

File[] files = XMLDirectory.listFiles(filter_xml_files); 
Arrays.sort(files); 
for(File _xml_file : files) { 
    ... 
} 

यह काम करता है क्योंकि File एक तुलनीय वर्ग, जो कि डिफ़ॉल्ट प्रकार से कोषगत pathnames है। यदि आप उन्हें अलग-अलग क्रमबद्ध करना चाहते हैं, तो आप अपना खुद का तुलनित्र परिभाषित कर सकते हैं।

+0

यह कोड की एक सुंदर रेखा है, लेकिन Arrays.sort() एक Iterable के बजाय शून्य वापस लौटता प्रतीत होता है। मैं थोड़ा सा पोक करूंगा। –

+3

@ थंडर खरगोश, माफी माफी! क्षमा करें, आप सही हैं। मुझे इसका परीक्षण करना चाहिए था। मैंने अपना जवाब संपादित किया। –

+0

धन्यवाद! यह मेरे लिए काम करता है और यह (अभी भी) बहुत आसान है! –

0

मुझे लगता है कि पिछला उत्तर यह करने का सबसे अच्छा तरीका है यह एक और आसान तरीका है। बस क्रमबद्ध परिणामों को मुद्रित करने के लिए।

String path="/tmp"; 
String[] dirListing = null; 
File dir = new File(path); 
dirListing = dir.list(); 
Arrays.sort(dirListing); 
System.out.println(Arrays.deepToString(dirListing)); 
+1

मैंने इसे अद्यतन किया है कृपया पुनर्विचार करें। अग्रिम धन्यवाद –

+0

क्या आप टिप्पणी प्रदान करेंगे क्योंकि आपको लगता है कि यह सही जवाब क्यों नहीं है। तो, मैं तदनुसार इसे संशोधित कर सकता हूं। –

+1

-1 मैं वास्तव में फ़ाइल सरणी को एक स्ट्रिंग सरणी में परिवर्तित करने का लाभ नहीं समझता और फिर फ़ाइल सरणी को स्वीकार्य उत्तर के रूप में सॉर्ट करने के बजाए सॉर्टिंग करता हूं। प्रतिक्रिया प्रदान करने के लिए – zelanix

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