2008-12-15 85 views
3

我GOOGLE了這一段時間,但似乎無法找到它,它應該很容易。我想追加一個CR,然後結束使用Transformer創建的XML文件。有沒有辦法做到這一點>java追加到文件

我試過以下,但這導致了一個空白文件?


Transformer xformer = TransformerFactory.newInstance().newTransformer(); 
xformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "file:///ReportWiz.dtd"); 
xformer.transform(source, result); 
OutputStream writer = new FileOutputStream(file); 
Byte b = '\n'; 
writer.write(b); 
writer.close();

回答

10

簡單...只需添加append選項:

new FileOutputStream(f, true /* append */); 
0

我不知道這個Transformer類。但是我發現你的編寫器/文件變量和你的xformer/source/result變量之間沒有聯繫......看起來你只寫了一個換行符。
除非你省略了一些基本部分。

+0

這將是jaxp中的Transformer類。 – 2008-12-15 21:40:18

1

顯而易見的答案是在Writer中使用StreamResult,並在關閉之前將您的角色附加到作者身上。

您似乎試圖重新打開該文件以追加該字符。 FileOutputStream構造函數的兩個參數形式包含一個附加標誌。

+1

使用帶有XML庫的Writer通常會導致麻煩,因爲變換器無法發現Writer編碼,以便正確設置嵌入在XML中的編碼屬性。改用OutputStream。 – erickson 2008-12-15 21:44:05

5

這裏有幾個選項。

我假設你的結果是StreamResult,你用String來創建,指定目標文件路徑。你可以考慮自己打開一個FileOutputStream,然後用它來構建你的StreamResult。然後,當變壓器完成後,附加行終止符,刷新並關閉流。如果沒有其他限制,我會使用這種方法。

如果您想要重新打開該文件,如問題所示,您需要使用一個採用可選append參數的構造函數FileOutputStream。將其設置爲true以避免破壞剛剛完成的轉換結果。

您也可以探索在變換中設置indent輸出屬性,或直接在模板中包含必要的行終止符。

0

一個音符,請確保您編寫使用編碼您使用的XML serializaton,或者您的文件將被打破相同的字符的換行符。