我讀到了FileWriter的java文檔 - 它不允許我們指定編碼。我使用FileWriter是爲了避免在將字符串列表寫入文件時自動附加的換行符(並且我認爲這是我可以用來實現的唯一的東西)。在FileWriter中設置編碼的替代方法 - Java
我現在面臨一些問題,幾個屬性文件中的一些日文字符被寫爲「???」,所以我需要以某種方式傳遞編碼信息。有沒有其他方法可以避免添加換行符或將封裝信息傳遞給FileWriter?
我讀到了FileWriter的java文檔 - 它不允許我們指定編碼。我使用FileWriter是爲了避免在將字符串列表寫入文件時自動附加的換行符(並且我認爲這是我可以用來實現的唯一的東西)。在FileWriter中設置編碼的替代方法 - Java
我現在面臨一些問題,幾個屬性文件中的一些日文字符被寫爲「???」,所以我需要以某種方式傳遞編碼信息。有沒有其他方法可以避免添加換行符或將封裝信息傳遞給FileWriter?
請勿使用FileWriter
,而應使用new OutputStreamWriter(new FileOutputStream(file), encoding)
。
如果您使用的是Path
(Java 7+),則可以使用Files.newBufferedWriter(path, charset, options)
指定Charset
。 (這也包括你的輸出在BufferedWriter
,這很好。)
經典的替代方案是使用OutputStreamWriter
並通過Charset
這種方式。
總是向作者傳遞一個字符集是一個好習慣,即使你不認爲它可能會處理非ASCII內容。
但我認爲newBufferedWriter會追加一個系統特定的換行符作爲EOL,我試圖避免。 BufferedWriter()會這樣做,不確定newBufferedWriter的行爲是否與w.r.t不同。 – AshwiniR
啊,有趣。我知道BufferedWriter支持newLine()來添加特定於平臺的換行符,但我認爲如果你寫了一個文字\ n,那就會被使用。這不是你看到的行爲嗎? –
我不想添加特定於平臺的換行符。 BufferedWriter正是如此。我想保留源文本文件中的換行符。但是現在我測試了OutputStreamWriter並且它工作正常! :-)沒有添加換行符,也允許指定編碼! – AshwiniR