बदलें InputStream को बफ़रडर के लिए


149

मैं Android में संपत्ति निर्देशिका से InputStream का उपयोग करके एक पाठ फ़ाइल लाइन पढ़ने की कोशिश कर रहा हूँ।

मैं इनपुटस्ट्रीम को बफ़ररएडर में बदलना चाहता हूं ताकि रीडलाइन () का उपयोग करने में सक्षम हो।

मेरे पास निम्नलिखित कोड हैं:

InputStream is;
is = myContext.getAssets().open ("file.txt");
BufferedReader br = new BufferedReader (is);

तीसरी पंक्ति निम्न त्रुटि छोड़ती है:

इस लाइन पर एकाधिक मार्कर
कंस्ट्रक्टर बफ़रडियर (इनपुटस्ट्रीम) अविकसित है।

C ++ में मैं जो करने की कोशिश कर रहा हूं वह कुछ इस तरह होगा:

StreamReader file;
file = File.OpenText ("file.txt");

line = file.ReadLine();
line = file.ReadLine();
...

मैं क्या गलत कर रहा हूं या मुझे यह कैसे करना चाहिए? धन्यवाद!

जवाबों:


281

BufferedReaderInputStreamसीधे नहीं लपेट सकता। यह दूसरा लपेटता है Reader। इस मामले में आप कुछ करना चाहते हैं:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

हां, एक InputStreamReader के साथ एक InputStream रैप करना, जो एक BufferedReader द्वारा लिपटा जाता है, रीडलाइन () फ़ंक्शन का उपयोग करने के लिए एक सामान्य "ट्रिक" है।
सेटअप

14
मेरा सुझाव है: BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));जावा 7 में जोड़ा
ब्रूको

StandardCharsets API स्तर> 19 पर काम नहीं करता है। @brcolow
फ्लोरिडा

1
मुझे लगता है कि आपके कहने का मतलब है कि जब तक एपीआई स्तर> = 19 नहीं होगा?
ब्रुकलो

23

एक बफ़रड्रेडर कंस्ट्रक्टर एक रीडर को तर्क के रूप में लेता है , न कि एक इनपुटस्ट्रीम। आपको पहले अपनी स्ट्रीम से एक रीडर बनाना चाहिए, जैसे:

Reader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);

अधिमानतः, आप StreamReader कंस्ट्रक्टर को एक चारसेट या वर्ण एन्कोडिंग नाम भी प्रदान करते हैं। चूंकि एक स्ट्रीम बस बाइट्स प्रदान करती है, इन्हें पाठ में परिवर्तित करने का मतलब एन्कोडिंग को पता होना चाहिए। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो सिस्टम डिफ़ॉल्ट मान लिया गया है।


20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.