我寫一個字符串到一個文件中,該字符串很長,大約100K,這裏是我的代碼:BufferedWriter將截斷字符串
public static void main(String[] args) throws IOException {
String s = "kkkk";
BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/liaoliuqing/Downloads/1.txt",true),1024);
bw.write(s);
bw.flush();
bw.close();
}
當字符串短,效果很好。但是當字符串非常長時,字符串將被截斷,只有一些字符被寫入文件。
是什麼問題?
這是我的代碼,它可以在很多線程中使用。
private void writeToFile(String filterName, String messageToWrite)
throws IOException {
if(!messageToWrite.contains("2015")){
LOG.warn(messageToWrite);
}
bufferWritter = getBufferWriter(filterName, messageToWrite);
bufferWritter.write(messageToWrite);
if(!messageToWrite.contains("2015")){
LOG.warn(messageToWrite);
}
bufferWritter.flush();
}
我很確定messageToWrite是完整的字符串,因爲我記錄它。但只是字符串的後半部分被寫入文件。
它在約10個線程中工作。
我發現這個問題。當一個線程正在寫入文件時,則是另一個線程運行的時候,第一個線程的內容會與第二個線程混淆。 我嘗試
returnWriter = new BufferedWriter(new FileWriter(fileName, true),64*1024);
到incread的bufferwriter的緩衝區大小,但它不能正常工作。它仍然只向文件寫入8192(默認緩衝區大小)。 如何解決這個問題?
嗯,我非常懷疑這是'BufferedWriter'的問題。我的猜測是,這與您查看文件的方式有關,但我們沒有足夠的信息來幫助您。你能製作一個簡短但完整的程序來證明問題嗎? –
你確定你的字符串是完整的嗎?獲取字符串可能存在問題。我很難懷疑java會在這麼短的時間之後以這樣簡單的任務失敗。 –
如果你試圖寫大於緩衝區大小的消息,我很確定它不工作,因爲你只寫'一次'。 – Fincio