Smith
Smith

Reputation: 31

BufferedReader to BufferedWriter

How can I obtain a BufferedWriter from a BufferedReader?

I'd like to be able to do something like this:

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

Upvotes: 3

Views: 10800

Answers (5)

Shubham Kadlag
Shubham Kadlag

Reputation: 2308

JAVA 9 Updates

Since Java 9, Reader provides a method called transferTo with the following signature:

public long transferTo(Writer out)  throws IOException

As the documentation states, transferTo will:

Reads all characters from this reader and writes the characters to the given writer in the order that they are read. On return, this reader will be at end of the stream. This method does not close either reader or writer. This method may block indefinitely reading from the reader, or writing to the writer. The behavior for the case where the reader and/or writer is asynchronously closed , or the thread interrupted during the transfer, is highly reader and writer specific, and therefore not specified.

If an I/O error occurs reading from the reader or writing to the writer, then it may do so after some characters have been read or written. Consequently the reader may not be at end of the stream and one, or both, streams may be in an inconsistent state. It is strongly recommended that both streams be promptly closed if an I/O error occurs.

So in order to write contents of a Java Reader to a Writer, you can write:

reader.transferTo(writer);

Upvotes: 4

Aaron J Lang
Aaron J Lang

Reputation: 2108

You could use Piped Read/Writers (link). This is exactly what they're designed for. Not sure you could retcon them onto an existing buffered reader you got passed tho'. You'd have to construct the buf reader yourself around it deliberately.

Upvotes: 0

Harshana
Harshana

Reputation: 7647

BufferedWriter constructor is not overloaded for accept readers right? what Buhb said was correct.

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

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

Upvotes: 0

Peter
Peter

Reputation: 5798

If you want to know what happens:

All input from the reader is copied to the inputstream

Something similar too:

 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);
      }
  }

More on input and output on The Really big Index

Upvotes: 1

Buhb
Buhb

Reputation: 7149

You can use the following from Apache commons io:

IOUtils.copy(reader, writer);

site here

Upvotes: 8

Related Questions