簡體   English   中英

BufferedWriter何時創建文件?

[英]When does BufferedWriter create file?

在創建文件時使用BufferedWriter.write()?

我從文檔中知道,當填充緩沖區時,它將刷新到文件,這是否意味着:

每次填充緩沖區時,我的文件系統上會出現一個不完整的文件?

或者該文件僅在BufferedWriter關閉時創建?

我擔心的是我使用BufferedWriter將文件寫入目錄,另一個進程正在查詢目錄中的新文件並讀取它們。 我不希望創建一個不完整的文件,並由其他進程讀取。

在創建文件時使用BufferedWriter.write()?

決不。 BufferedWriter本身只是寫入另一個Writer 現在,如果您正在使用FileOutputStreamFileWriter (其中第一個可能包含在OutputStreamWriter ),那么在構造對象時,即在您實際編寫之前,該文件已創建(或者在已存在的情況下打開以進行寫入)任何數據。

我擔心的是我使用BufferedWriter將文件寫入目錄,另一個進程正在查詢目錄中的新文件並讀取它們。 我不希望創建一個不完整的文件,並由其他進程讀取。

處理此問題的一種典型方法是寫入暫存區域,然后將文件重命名為正確的位置,這通常是原子操作。 或者甚至將文件寫入正確的目錄,但是具有輪詢進程不會發現的文件擴展名 - 然后將文件重命名為最終文件名。

BufferedWriter不會像Jon Skeet所說的那樣創建文件。 而且,當您將其寫入磁盤時,您無法保證其他進程不會讀取不完整的文件。 但是你可以做兩件事:

  1. 在寫入完成之前,鎖定文件以使其他進程無法讀取該文件。 關於此站點上的Java文件鎖定有幾個問題(搜索“[java] lock file”)。
  2. 使用另一個文件名創建文件(即使用其他進程未查找的擴展名),並在寫入完成后重命名該文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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