2011-03-09 68 views
3

我有兩個文本文件,我想抓取一個流並轉換爲字符串。最終,我想要兩個單獨的文件合併。流到字符串:將多個文件合併爲一個字符串

到目前爲止,我已經得到了

 //get the input stream of the files. 

    InputStream is = 
      cts.getClass().getResourceAsStream("/files/myfile.txt"); 


    // convert the stream to string 

    System.out.println(cts.convertStreamToString(is)); 

的getResourceAsStream用不了多字符串作爲參數。那麼我需要做什麼?分別轉換它們併合並在一起?

任何人都可以告訴我一個簡單的方法來做到這一點?

+2

字符串連接是的*基本*特徵之一的java。 'String merged = string1 + string2' – 2011-03-09 19:19:29

+0

Thanks @johan。我需要爲每個文件單獨的InputStream嗎? – LuxuryMode 2011-03-09 19:26:46

回答

6

這聽起來像你想串聯流。您可以使用SequenceInputStream從多個流創建單個流。然後從這個單一數據流中讀取數據,並根據需要使用它。

下面是一個例子:

String encoding = "UTF-8"; /* You need to know the right character encoding. */ 
InputStream s1 = ..., s2 = ..., s3 = ...; 
Enumeration<InputStream> streams = 
    Collections.enumeration(Arrays.asList(s1, s2, s3)); 
Reader r = new InputStreamReader(new SequenceInputStream(streams), encoding); 
char[] buf = new char[2048]; 
StringBuilder str = new StringBuilder(); 
while (true) { 
    int n = r.read(buf); 
    if (n < 0) 
    break; 
    str.append(buf, 0, n); 
} 
r.close(); 
String contents = str.toString(); 
+0

@Erickson真棒!非常感謝。所以一旦我獲得單一的流,我可以繼續我的轉換成一個字符串,就像我以前,對嗎? – LuxuryMode 2011-03-09 19:44:45

+0

另外,出於某種原因,SequenceInputStream不允許添加2個以上的流。它最多隻需要兩條流?我其實需要三個。 – LuxuryMode 2011-03-09 19:57:38

+1

@LuxuryMode - 你可以做2個以上,但你必須創建一個'Enumeration'。我會更新我的例子。 – erickson 2011-03-09 20:04:36

0

我可以想到幾種方法 創建一個StringBuilder,然後將每個流轉換爲一個字符串並追加到stringbuilder。或者,創建一個可寫的內存流並將每個輸入流傳送到該內存流中,然後將其轉換爲字符串。

0

創建一個循環,爲每個文件加載文本到StringBuilder。然後一旦追加了每個文件的數據,就可以在構建器上調用toString()。

相關問題