2011-05-25 10 views
8

वस्तुतः प्रत्येक कोड उदाहरण वहाँ एक TXT फ़ाइल लाइन-दर-रेखा पढ़ता है और इसे स्ट्रिंग सरणी में संग्रहीत करता है। मैं लाइन-बाय-लाइन प्रोसेसिंग नहीं चाहता क्योंकि मुझे लगता है कि यह मेरी आवश्यकताओं के लिए संसाधनों का एक अनावश्यक अपशिष्ट है: मैं बस इतना करना चाहता हूं कि एक स्ट्रिंग में .txt सामग्री को तेज़ी से और कुशलता से डंप करें। नीचे दी गई विधि नौकरी करता है, हालांकि एक दोष के साथ:लाइन ब्रेक बनाए रखने के दौरान मैं एक जावा स्ट्रिंग में .txt फ़ाइल को कैसे पढ़ सकता हूं?

private static String readFileAsString(String filePath) throws java.io.IOException{ 
    byte[] buffer = new byte[(int) new File(filePath).length()]; 
    BufferedInputStream f = null; 
    try { 
     f = new BufferedInputStream(new FileInputStream(filePath)); 
     f.read(buffer); 
     if (f != null) try { f.close(); } catch (IOException ignored) { } 
    } catch (IOException ignored) { System.out.println("File not found or invalid path.");} 
    return new String(buffer); 
} 

... दोष यह है कि लाइन ब्रेक लंबी रिक्त स्थान में परिवर्तित हो जाते हैं। "                               "।

मैं लाइन ब्रेक को \ n या \ r से <br> (HTML टैग) से परिवर्तित करना चाहता हूं।

अग्रिम धन्यवाद।

+0

मैं इस विधि
टैग HTML में पाठ फ़ाइल से पंक्ति विराम कन्वर्ट करने के लिए जोड़ने की कोशिश की है, लेकिन यह काम नहीं किया: string.replaceAll ("(\ r \ n | \ N)", "
"); – slashline

+1

इसे लाइन-बाय-लाइन प्रोसेसिंग पूरी फ़ाइल को डंप करने के रूप में उतनी ही कुशल होगी (यदि अधिक नहीं है), फिर वापस जाकर '
' टैग –

+0

के साथ लाइन ब्रेक को प्रतिस्थापित करना वास्तव में, प्रत्येक पंक्ति के माध्यम से जा रहा एक लूप उतना ही कुशल है ? दिलचस्प .. मैं उसके साथ तब जा सकता हूं। धन्यवाद! – slashline

उत्तर

3

- जब से तुम बाद नहीं करना चाहते, तो आप निम्न जो रूपांतरण करना चाहिए द्वारा अपनी वापसी की जगह ले सकता देखें कि आप कहां से अपनी लंबी जगहें प्राप्त करते हैं।

+0

यह अभी भी लाइन-बाय-लाइन प्रोसेसिंग है, लेकिन किसी ने कहा है कि यह एक मूल स्ट्रिंग में सीधे .txt फ़ाइल को डंप करने से धीमा नहीं है। तो मैं लाइन-लाइन-लाइन प्रोसेसिंग कर सकता हूं, लेकिन यह एक सवाल उठाता है: कौन सा तेज है, स्कैनर या बुफर्ड रीडर? – slashline

+0

यदि आपको कोई फर्क नहीं पड़ता है, तो शायद यह इतना बड़ा नहीं है? एचटीएमएल पृष्ठों के सामान्य आकार के लिए, मैं एक प्रासंगिक अंतर की उम्मीद नहीं करता। ऐसे कई संभावित प्रभाव हैं (हार्डड्राइव स्पीड, हार्डड्राइव कैश, ओएस, फाइल साइज, जावा संस्करण, ...) कि आपको लक्ष्य प्रणाली के करीब और इसी तरह के इनपुट के साथ सिस्टम पर अपना माप करना चाहिए। –

+0

क्या यह मानते हुए नहीं है कि फ़ाइल में आखिरी पंक्ति में लाइन लाइन ब्रेक भी शामिल होना चाहिए? कुछ मामलों में यह खतरनाक हो सकता है। –

1

आप इस कोड जोड़ सकते हैं:

return new String(buffer).replaceAll("(\r\n|\r|\n|\n\r)", "<br>"); 

यह आपके लिए क्या देख रहे है?

+0

यह काम नहीं करेगा। मुझे लगता है कि समस्या यह है कि ** बफर ** चर ** ** बाइट ** है, इसलिए इसमें \ r \ n नहीं है। \ R \ n के बजाय इसमें रिक्त स्थान हैं .. जिससे
ठीक से डालना मुश्किल हो जाता है। – slashline

+0

मैंने विंडोज पीसी पर कोशिश की है और यह सही तरीके से काम करता है। –

1

कोड फ़ाइल सामग्री को पढ़ेगा जैसे कि वे फ़ाइल में दिखाई देते हैं - लाइन ब्रेक सहित। यदि आप एचटीएमएल आदि में प्रदर्शित होने जैसी किसी अन्य चीज़ में ब्रेक को बदलना चाहते हैं, तो आपको या तो फ़ाइल को लाइन लाइन को पढ़कर इसे पोस्ट करने या इसे करने की आवश्यकता होगी।

sc = new java.util.Scanner ("sample.txt") 
while (sc.hasNext()) { 
    buf.append (sc.nextLine()); 
    buf.append ("<br />"); 
} 

मुझे नहीं पता: क्या एक स्कैनर का उपयोग करने और linefeeds जोड़ने के बारे में अपने आप को

return (new String(buffer)).replaceAll("\r[\n]?", "<br>"); 
+0

यह भी काम नहीं किया। मुझे लगता है कि समस्या यह है कि ** बफर ** चर ** ** बाइट ** है, इसलिए \ r \ n शायद छीन लिया गया है। \ R \ n के बजाय इसमें रिक्त स्थान हैं .. जिससे
ठीक से डालना मुश्किल हो जाता है। – slashline

+0

\ r और \ n क्रमशः एएससीआई 10 और 13 हैं। मैं सहमत नहीं हूं कि वे बाइट में फिट नहीं हो सकते हैं। वैसे भी प्रतिस्थापित करने का प्रयास करें - मुझे कोई कारण नहीं दिखता कि यह क्यों काम नहीं करेगा अन्यथा आपको अपनी स्रोत फ़ाइल का निरीक्षण करने की आवश्यकता है यदि इसमें इनमें से कोई भी पात्र है। या नोटपैड आदि का उपयोग करके बनाई गई किसी अन्य टेक्स्ट फ़ाइल के साथ कोड आज़माएं। यदि आपको कोई बदलाव दिखाई देता है, तो आपको हमें यह बताने की आवश्यकता होगी कि आप किस प्रकार की टेक्स्ट फ़ाइल का उपयोग कर रहे हैं। –

0
StringBuilder sb = new StringBuilder(); 
     try { 
      InputStream is = getAssets().open("myfile.txt"); 
      byte[] bytes = new byte[1024]; 
      int numRead = 0; 
      try { 
       while((numRead = is.read(bytes)) != -1) 
        sb.append(new String(bytes, 0, numRead)); 
      } 
      catch(IOException e) { 

      } 
      is.close(); 
     } 
     catch(IOException e) { 

     } 

अपने जिसके परिणामस्वरूप String: String result = sb.toString();

तो जो कुछ भी आप इस result में चाहते हैं की जगह।

3

आप बफर में सीधे पढ़ सकते हैं और फिर बफर से एक स्ट्रिंग बनाने के लिए:

File f = new File(filePath); 
    FileInputStream fin = new FileInputStream(f); 
    byte[] buffer = new byte[(int) f.length()]; 
    new DataInputStream(fin).readFully(buffer); 
    fin.close(); 
    String s = new String(buffer, "UTF-8"); 
0

आप org.apache.commons.io.IOUtils.toString (InputStream है) के रूप में फ़ाइल की सामग्री प्राप्त करने के लिए प्रयास करना चाहिए स्ट्रिंग। वहां आप इनपुट स्ट्रीम स्ट्रीम को

getAssets().open("xml2json.txt") *<<- belongs to Android, which returns InputStream* 

से प्राप्त करेंगे।प्राप्त करने के लिए स्ट्रिंग इस का उपयोग करें:

String xml = IOUtils.toString((getAssets().open("xml2json.txt"))); 

तो,

String xml = IOUtils.toString(*pass_your_InputStream_object_here*); 
+0

एंड्रॉइड के लिए विशिष्ट 'getAssets' नहीं है? – demongolem

+0

@ डेमोंगोलम हां। लेकिन IOUtils कक्षा जावा का है और इसकी विधि टूस्ट्रिंग समाधान के रूप में काम करेगी। मैं सहमत हूं, मुझे जवाब में विशिष्ट होना चाहिए। अनुस्मारक के लिए धन्यवाद। –

0

मैं @Sanket पटेल ने सामान्य दृष्टिकोण से सहमत हैं, लेकिन का उपयोग कर कॉमन्स आई/ओ आप की संभावना File Utils चाहते हैं।

तो अपने कोड शब्द देखने के लिए की तरह:

String myString = FileUtils.readFileToString(new File(filePath)); 

वहाँ भी एक वैकल्पिक वर्ण एन्कोडिंग निर्दिष्ट करने के लिए एक और संस्करण है।

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