2012-12-31 13 views
5

मेरे पास एक टेक्स्ट फ़ाइल है और मैं इसकी संपूर्ण सामग्री को स्ट्रिंग चर में पढ़ना चाहता हूं। फ़ाइल को इनपुटस्ट्रीम के रूप में खोला जा रहा है क्योंकि मैं एंड्रॉइड की assetManager.open() विधि का उपयोग कर रहा हूं।एक पाठ फ़ाइल से सभी डेटा को पढ़ने के लिए सबसे उपयुक्त तरीका क्या है?

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

वहाँ इस पाठ में पढ़ने मैं पर विचार वहाँ लाइन द्वारा लाइन में इसे पढ़ने के लिए कोई आवश्यकता नहीं है की एक बेहतर तरीका है, मैं यह सब एक ही बार यदि संभव हो तो

+0

'स्पष्ट इनपुट एन्कोडिंग पैरामीटर के साथ' नया इनपुटस्ट्रीम रीडर (इनपुटस्ट्रीम, "यूटीएफ -8") ठीक है। 'Files.readAllLines' की @assylias tip भी अच्छी है। –

उत्तर

2

एक सामान्य रूप से पहिया बदलने चाहिए नहीं है, इसलिए Apache Commons पुस्तकालय का उपयोग करें, यदि भूमि के ऊपर Android पर सहने है। org.apache.commons.io.IOUtils.toString का उपयोग करें।

InputStream in = new FileInputStream(new File("a.txt")); 
String s = IOUtils.toString(in, "UTF-8"); 
4

में प्राप्त करना चाहते हैं यह वही है Java 7 Files.readAllLines method करता है - मैं इसे कर के लिए एक बहुत अच्छा तरीका होने की अपेक्षा करेंगे (यह एक कोशिश के साथ-संसाधनों वाक्य रचना जो एंड्रॉयड पर काम करने के लिए आसानी से transposable है का उपयोग करता है):

public static List<String> readAllLines(Path path, Charset cs) throws IOException { 
    try (BufferedReader reader = newBufferedReader(path, cs)) { 
     List<String> result = new ArrayList<String>(); 
     for (;;) { 
      String line = reader.readLine(); 
      if (line == null) 
       break; 
      result.add(line); 
     } 
     return result; 
    } 
} 

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

+0

एंड्रॉइड एसेट मैनेजर केवल फ़ाइल को इनपूस्ट्रीम के रूप में खुलता है, इसलिए मैं यही काम कर रहा हूं। – sonicboom

+0

क्या एंड्रॉइड में केवल पथों का उपयोग करके संपत्तियों का उपयोग करने का कोई और तरीका है? मैं एसेट मैनेजर क्लास को पहले स्थान पर रखने का बिंदु नहीं देख सकता अगर यह ऐप्स की संपत्तियों तक पहुंचने के लिए सख्त विधि लागू नहीं करना है? – sonicboom

-1

तुम भी स्कैनर वर्ग

Scanner scan = new Scanner(file); 
String content = scan.next(); 
+0

यह अगले टोकन स्कैन करता है और पूरी फ़ाइल नहीं। – TechSpellBound

0

उपयोग कर सकते हैं यह है कि यह ऐसा करने का एक और संभव तरीका है।

BufferedReader br = new BufferedReader(new FileReader("a.txt")); 
char[] cbuf = new char[500]; 
br.read(cbuf); 
String fileContents = new String(cbuf); 
0
Scanner scanner = new Scanner(file, encoding);  
scanner.useDelimiter("\\A"); 
if (!scanner.hasNext()) {  // corner case -- file is empty 
    return ""; 
} 
String result = scanner.next(); 
scanner.close(); 
संबंधित मुद्दे