簡體   English   中英

BufferedReader 到 BufferedWriter

[英]BufferedReader to BufferedWriter

如何從BufferedReader BufferedWriter

我希望能夠做這樣的事情:

BufferedReader read  = new BufferedReader(new InputStreamReader(...));
BufferedWriter write = new BufferedWriter(read);

您可以使用 Apache commons io 中的以下內容:

IOUtils.copy(reader, writer);

網站在這里

JAVA 9 更新

從 Java 9 開始,Reader 提供了一個名為 transferTo 的方法,其簽名如下:

public long transferTo(Writer out)  throws IOException

正如文檔所述, transferTo 將:

從該讀取器讀取所有字符,並按照讀取順序將字符寫入給定寫入器。 返回時,此閱讀器將位於 stream 的末尾。 此方法不會關閉讀取器或寫入器。 此方法可能會無限期地阻止從讀取器讀取或寫入寫入器。 讀取器和/或寫入器異步關閉或傳輸期間線程中斷的情況的行為是高度特定於讀取器和寫入器的,因此未指定。

如果從讀取器讀取或寫入寫入器發生 I/O 錯誤,則可能在讀取或寫入某些字符后發生。 因此,閱讀器可能不在 stream 的末尾,並且一個或兩個流可能位於不一致的 state 中。 如果發生 I/O 錯誤,強烈建議立即關閉兩個流。

因此,為了將 Java Reader 的內容寫入 Writer,您可以編寫:

reader.transferTo(writer);

如果你想知道會發生什么:

來自閱讀器的所有輸入都被復制到輸入流

也有類似的東西:

 private final void copyInputStream( InputStreamReader in, OutputStreamWriter out )      throws IOException
  {
    char[] buffer=new char[1024];
    int len;
    while ( ( len=in.read(buffer) ) >= 0 )
      {
      out.write(buffer, 0, len);
      }
  }

更多關於輸入和 output 的真正大索引

BufferedWriter 構造函數沒有為接受讀者重載,對嗎? 布赫說的是對的。

BufferedWriter  writer = new BufferedWriter(
new FileWriter("filename_towrite"));    

IOUtils.copy(new InputStreamReader(new FileInputStream("filename_toread")), writer);
writer.flush();
writer.close();

您可以使用管道讀/寫器(鏈接)。 這正是它們的設計目的。 不確定您是否可以將它們重新配置到您通過的現有緩沖閱讀器上。 您必須自己圍繞它構建 buf 閱讀器。

暫無
暫無

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

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