簡體   English   中英

為什么掃描儀 object 會影響 BufferedWriter 寫入文件的能力?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM