[英]Why is the Scanner object affecting the BufferedWriter's ability to write to a file?
我正在嘗試從給定的 URL 中讀取文本內容,然后打印內容,並使用 BufferedWriter 將其寫入文本文件。 我需要包含一個代碼塊,該代碼塊一次只允許打印 35 行文本,直到用戶使用 Scanner 實例按下回車,但立即寫入整個文本文件。 所有這些都必須在 try-with-resource 塊中完成。 這是我的代碼:
try(InputStream stream = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))){
Scanner input = new Scanner(System.in);
String newLine;
int PAGE_LENGTH = 1;
while(((newLine = reader.readLine()) != null)) {
writer.write(newLine + "\n");
//writer.flush();
if(PAGE_LENGTH % 35 == 0) {
System.out.println("\n- - - Press Enter to Continue - - -");
input.nextLine();
}
else {
System.out.println(newLine);
PAGE_LENGTH++;
}
}
writer.close();
}
在實施 35 行限制之前,作者正確地編寫了一個文本文件。 我嘗試添加writer.flush();
在循環中,這導致只寫了 35 行,所以我知道一旦觸發“if”語句就會出現問題(它必須寫幾百行文本)。 我注意到如果我注釋掉input.nextLine();
作家再次發揮作用。
Scanner 實例如何阻止 BufferedWriter 寫入文本文件? 我沒有考慮什么? 任何幫助/反饋將不勝感激!
Scanner 實例如何阻止 BufferedWriter 寫入文本文件?
好吧,那么我會說這僅僅是因為input.nextLine
阻塞了您的程序,因此您有時間打開文件並檢查是否寫入了任何內容。
如果您不flush
,則在緩沖區已滿(並且文本文件的 35 行顯然沒有填滿緩沖區)或關閉文件之前,實際上不會寫入任何內容。 這是緩沖寫入器的主要特性,與非緩沖寫入器不同。
不管你有沒有掃描儀。 只是沒有掃描儀,程序運行速度太快,以至於您只能在關閉文件后檢查文件,此時所有內容都已寫入其中。
另外,無論執行 if 語句的哪個分支,都應該增加PAGE_LENGTH
,否則一旦PAGE_LENGTH
達到 35,它將一直點擊“if”分支,等待你按 enter。
if(PAGE_LENGTH % 35 == 0) {
System.out.println("\n- - - Press Enter to Continue - - -");
input.nextLine();
}
else {
System.out.println(newLine);
}
// move this outside of the if statement!
PAGE_LENGTH++;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.