सबसे पहले, क्या आपके पास जावा 7 का उपयोग करने की कोई संभावना है? वहां आपके पास FileVisitor
और Files.walkFileTree
है, जो शायद आपकी स्मृति बाधाओं के भीतर काम करना चाहिए।
अन्यथा, एक ही रास्ता मैं के बारे में सोच सकते हैं एक फिल्टर है कि हमेशा रिटर्न के साथ
File.listFiles(FileFilter filter)
उपयोग करने के लिए है
false
(सुनिश्चित करना है कि फाइलों से भरा सरणी स्मृति में रखा कभी नहीं किया गया है), लेकिन यह पकड़ता फ़ाइलों के साथ संसाधित करने के लिए रास्ता, और शायद उन्हें एक निर्माता/उपभोक्ता कतार में रखता है या फ़ाइल के नाम बाद में ट्रैवर्सल के लिए डिस्क पर लिखता है।
वैकल्पिक रूप से, अगर आप फ़ाइलों के नाम पर नियंत्रण, या अगर वे कुछ अच्छा तरीका में नामित कर रहे हैं, आप मात्रा में फ़ाइलों को एक फिल्टर है कि फार्म पर फ़ाइल नाम को स्वीकार करता है का उपयोग कर संसाधित कर सकते हैं file0000000
- filefile0001000
तो file0001000
- filefile0002000
और इतने पर।
नाम हैं तो
नहीं इस तरह एक अच्छा तरीका में नाम, तो आप उन्हें फ़ाइल-नाम है, जो काफी समान रूप से पूर्णांकों के उस समूह पर वितरित करने के लिए माना जाता है के हैश-कोड के आधार पर छानने की कोशिश कर सकते।
अद्यतन: साई। शायद काम नहीं करेगा।
public File[] listFiles(FilenameFilter filter) {
String ss[] = list();
if (ss == null) return null;
ArrayList v = new ArrayList();
for (int i = 0 ; i < ss.length ; i++) {
if ((filter == null) || filter.accept(this, ss[i])) {
v.add(new File(ss[i], this));
}
}
return (File[])(v.toArray(new File[v.size()]));
}
तो यह शायद पहली पंक्ति वैसे भी पर विफल हो जाएगा ... क्रमबद्ध का निराशाजनक: बस listFiles कार्यान्वयन पर एक नज़र था। मेरा मानना है कि फाइलों को अलग-अलग निर्देशिकाओं में रखना सबसे अच्छा विकल्प है।
बीटीडब्ल्यू, क्या आप फ़ाइल नाम का उदाहरण दे सकते हैं? क्या वे "अनुमान लगाने योग्य" हैं? जैसा
for (int i = 0; i < 100000; i++)
tryToOpen(String.format("file%05d", i))
क्षमा करें, लेकिन कौन सा ओएस इसका समर्थन नहीं करता है? 1 9 50 में रह रहे हो? मुझे विभिन्न टूल्स उड़ाने का पता है, उदाहरण के लिए विंडोज़ पर (एक्सप्लोरर बहुत धीमा हो रहा है), लेकिन फाइल सिस्टम इसका समर्थन करता है। – TomTom
@ टॉमटॉम: एफएटी 32 (पुराना, लेकिन किसी भी तरह से 1 9 50 युग, और अभी भी काफी आम है) प्रति निर्देशिका filesf 65k की फाइलों की एक सीमा है। –
लेकिन मानते हैं कि कोई इसका उपयोग करता है जो नकारात्मक है - डिवाइस को छोड़कर इसका समर्थन नहीं कर रहा है, और फिर समस्या - अनुमान लगाएं - "फाइलों को सूचीबद्ध करने में समस्या" नहीं होगी। – TomTom