2012-07-23 64 views
1

我需要讀取一組xml和屬性文件並解析數據。目前我正在使用inputstream和字符串生成器來執行此操作。但是這並不像輸入文件那樣創建文件。我不想刪除空格和新行。我如何做到這一點。java讀取屬性和使用stringbuilder的xml文件

is = test.getInputStream(); 
br = new BufferedReader(new InputStreamReader(is)); 
String line5; 
StringBuilder sb5 = new StringBuilder(); 
while ((line5 = br.readLine()) != null) { 
    sb5.append(line5); 
} 
String s = sb5.toString(); 

我的輸出是:

#test 123 #test2 345

預期成果是:

#test 
123 
#test2 
345 

有什麼想法?謝謝

回答

3

br.readLine()消耗換行符,你需要在追加行後將它們添加到你的StringBuilder。

is = test.getInputStream(); 
br = new BufferedReader(new InputStreamReader(is)); 
String line5; 
StringBuilder sb5 = new StringBuilder(); 
while ((line5 = br.readLine()) != null) { 
    sb5.append(line5); 
    sb5.append("\n"); 
} 

如果你想閱讀文件爲String一個極其簡單的解決方案,Apache Commons-IO具有用於執行這樣的任務(org.apache.commons.io.FileUtils)的方法。

FileUtils.readFileToString(File file, String encoding); 
+0

謝謝。追加「\ n」的作品。 – User 2012-07-23 18:41:26

+0

如果它的工作標記爲正確的答案! :) – VoronoiPotato 2012-08-06 18:48:17

1

readLine()方法不添加EOL字符(\ n)。因此,在將字符串附加到構建器時,需要添加EOL字符,如sb5.append(line5+"\n");

1

各種readLine方法會從輸入中丟棄換行符。

BufferedReader docs

返回:包含該行的內容,不包括任何行終止字符的字符串,或者爲null如果該流的結尾已經到達

解決方案可能很簡單,就是每readLinesb5.append(line5 + "\n");向您的StringBuilder加回一個換行符。

更好的選擇是首先使用read方法讀入中間緩衝區,並提供自己的char[]。你仍然可以使用StringBuilder.append,並獲得一個字符串將與文件內容匹配。