2009-06-04 12 views
7

मेरे पास एक "प्रोसेसर" घटक है जो एक फ़ाइल, इनपुटस्ट्रीम, रीडर, या आदि को संसाधित कर सकता हैक्या जावा इनपुटस्ट्रीम बनाने का कोई आसान तरीका है जिसमें कई संलग्न फ़ाइलें शामिल हैं?

विभिन्न कारणों से, मैं एक बड़ी फ़ाइल के बजाय कई बड़ी फ़ाइलों के साथ समाप्त होता हूं।

वहाँ एक इनपुट स्ट्रीम (या पाठक) के निर्माण के लिए एक तरीका है कि है: पारदर्शी रूप से "संलग्न कर देता है" इन सभी फ़ाइलों को इतना है कि: 1) "प्रोसेसर" पता नहीं है, जहां एक फ़ाइल शुरू कर दिया है या किसी अन्य को समाप्त 2) नहीं फ़ाइल सिस्टम में परिवर्तन होते हैं (उदाहरण के लिए, फ़ाइलों का कोई वास्तविक जोड़ नहीं) 3) प्रत्येक फ़ाइल को क्रम में पढ़ा जाता है ताकि मैं उन सभी को स्मृति में लोड करने और प्रोसेसर पढ़ने से पहले उन्हें जोड़ने की लागत का भुगतान नहीं कर सकता?

मुझे यकीन है कि ऐसा कुछ लिखना संभव है, लेकिन मुझे आश्चर्य है कि कोई पहले से मौजूद है या नहीं; यह थोड़ी देर के बाद से मैंने फ़ाइल आधारित आईओ किया था।

उत्तर

19

SequenceInputStream एकाधिक धाराओं को जोड़ता है।

List<InputStream> opened = new ArrayList<InputStream>(files.size()); 
for (File f : files) 
    opened.add(new FileInputStream(f)); 
InputStream is = new SequenceInputStream(Collections.enumeration(opened)); 

प्रत्येक फ़ाइल खोलने पर अपवाद हैंडलिंग (दिखाया नहीं गया) महत्वपूर्ण है; सुनिश्चित करें कि सभी फाइलें अंततः बंद होने के लिए निश्चित हैं, भले ही ऑपरेशन SequenceInputStream से पहले निरस्त हो जाए।

+1

अरे, मैं पाइप वाली धाराओं से परिचित था, यह नहीं पता था कि यह एक अस्तित्व में है, बेहतर दिखना चाहिए था। धन्यवाद ! – Uri

4

आप दूसरे के बाद एक स्ट्रीम पढ़ने के लिए SequenceInputStream जैसे कुछ का उपयोग कर सकते हैं।

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