BufferedReader в BufferedWriter

Как я могу получить BufferedWriter из BufferedReader?

Я хотел бы иметь возможность сделать что-то вроде этого:

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

person Smith    schedule 17.08.2011    source источник


Ответы (5)


Вы можете использовать следующее из Apache commons io:

IOUtils.copy(reader, writer);

сайт здесь

person Buhb    schedule 17.08.2011
comment
пожалуйста, добавьте ссылку на apache.commons, чтобы улучшить этот ответ. - person amit; 17.08.2011
comment
Привет, Buhb, он говорит, что копия метода недоопределена для строки типа. Я думаю, что я сделал что-то не так, но я не знаю, что? - person Smith; 17.08.2011
comment
Я предполагаю, что вы хотите записать содержимое читателя в писатель. Вы должны создать средство записи, ссылающееся на то, что вы хотите написать. Когда у вас есть модуль записи, вы можете копировать из модуля чтения, используя описанный выше метод копирования. - person Buhb; 17.08.2011

Обновления JAVA 9

Начиная с Java 9, Reader предоставляет метод transferTo со следующей сигнатурой:

public long transferTo(Writer out)  throws IOException

Как указано в документации, TransferTo будет:

Читает все символы из этого считывателя и записывает символы в заданный модуль записи в том порядке, в котором они были прочитаны. По возвращении этот считыватель будет в конце потока. Этот метод не закрывает ни чтения, ни записи. Этот метод может заблокировать на неопределенное время чтение из модуля чтения или запись в модуль записи. Поведение в случае асинхронного закрытия модуля чтения и/или записи или прерывания потока во время передачи сильно зависит от модуля чтения и записи и поэтому не специфицируется.

Если при чтении из устройства чтения или записи в устройство записи возникает ошибка ввода-вывода, то это может произойти после того, как некоторые символы были прочитаны или записаны. Следовательно, считыватель может не находиться в конце потока, а один или оба потока могут находиться в несогласованном состоянии. Настоятельно рекомендуется немедленно закрыть оба потока в случае возникновения ошибки ввода-вывода.

Итак, чтобы записать содержимое Java Reader в Writer, вы можете написать:

reader.transferTo(writer);
person Shubham Kadlag    schedule 17.05.2018

Если вы хотите знать, что происходит:

Весь ввод из считывателя копируется во входной поток

Тоже что-то похожее:

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

Подробнее о вводе и выводе см. в The Really Big Index Индекс

person Peter    schedule 17.08.2011

Конструктор BufferedWriter не перегружен для приема читателей, верно? то, что сказал Бухб, было правильным.

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

IOUtils.copy(new InputStreamReader(new FileInputStream("filename_toread")), writer);
writer.flush();
writer.close();
person Harshana    schedule 17.08.2011
comment
он говорит, что копия метода не определена для строки типа - person Smith; 17.08.2011

Вы можете использовать Piped Read/Writers (ссылка ). Это именно то, для чего они предназначены. Не уверен, что вы могли бы перенастроить их на существующий буферизованный ридер, который вы передали. Вы должны были бы создать buf reader самостоятельно вокруг него.

person Aaron J Lang    schedule 06.01.2012