2013-02-18 117 views
0

我與它多線串如下圖所示爪哇 - 編寫多字符串文件

<?xml version="1.0" encoding="UTF-8"?> 
<books> 

    <book publishyear="1990"> 
     <name>Harry Potter</name> 
    </book> 
</books> 

我怎麼寫一個文件?我已經嘗試了緩衝作家,但是,它並不需要多行字符串。

try{ 
      FileWriter fstream = new FileWriter("D:/temp.txt"); 
      BufferedWriter out = new BufferedWriter(fstream); 
      out.write(" <?xml version="1.0" encoding="UTF-8"?> 
<books> 

    <book publishyear="1990"> 
     <name>Harry Potter</name> 
    </book> 
</books>"); 

      out.close(); 
    }catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
+0

您可以嘗試爲文件中的換行符添加\ n。 例如: - \ n <書出版..... – mooonli 2013-02-18 09:45:34

+0

你應該首先確保你已經正確轉義字符串中的引號,如輪「UTF-8」。 – RoryB 2013-02-18 09:47:00

+0

將所有內容放入** StringBuffer/Builder **中,然後在文件中寫入它的'toString()'版本。字符串'連續'爲這麼多行,是麻煩的。 – SudoRahul 2013-02-18 09:56:13

回答

5

永遠不要手動編寫XML文檔。文件編碼會失敗,語法錯誤會失敗。總是使用DOM礦石類似的東西。您的演示代碼已經包含錯誤。

+0

嗨邁克爾,我有一個字符串被寫入到一個文件中。字符串可以是明文/ xml /任何與多行。所以我不知道我得到什麼類型的字符串....那麼是否可以將多行字符串寫入文件? – shockwave 2013-02-18 10:15:20

+0

如果您不知道內容,則客戶端必須提供有效的輸入,因爲您只提供寫入功能。 – 2013-02-18 10:21:01

3

這與編寫字符串或BufferedWriter無關。

Java沒有多行字符串,所以如果你希望它們在源代碼的多行中,你必須連接字符串。您還需要「與\」

與該轉義\ n字符來代替實際的換行符和逃避,你這樣做:

String foo = "<?xml version="1.0" encoding=\"UTF-8\"?>\n"+ 
"<books>\n"+ 
" <book publishyear=\"1990\">\n"+ 
"  <name>Harry Potter</name>\n"+ 
" </book>\n"+ 
"</books>"; 

out.write(foo); 

你可以寫這一切都在你的源代碼,一個太行如果你想:

out.write("<?xml version="1.0" encoding=\"UTF-8\"?>\n<books>\n ... etc.etc.")); 
0

你應該避免引號,並使用PrintWriter,它提供了一個println方法。

PrintWriter out = new PrintWriter(new BufferedWriter(fstream));通過使用BufferedWriter
請參見下面的代碼作爲例子

out.write("<books>\r\n"); 
0

您可以在新的一行肯定寫,用自己的邏輯合併(:

out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 
out.println("<books>)"; 

或者可以追加行終止您的字符串舉例寫一個文件寫新行)

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 
writer.write("I am the first Line"); 
writer.newLine(); 
writer.write("I am in the second Line"); 

writer.close(); 

你需要使用newLine()方法BufferedWriter
希望這會有所幫助,而且不必將您的代碼更改爲新的輸出流:)