Как я могу получить BufferedWriter
из BufferedReader
?
Я хотел бы иметь возможность сделать что-то вроде этого:
BufferedReader read = new BufferedReader(new InputStreamReader(...));
BufferedWriter write = new BufferedWriter(read);
Как я могу получить BufferedWriter
из BufferedReader
?
Я хотел бы иметь возможность сделать что-то вроде этого:
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 будет:
Читает все символы из этого считывателя и записывает символы в заданный модуль записи в том порядке, в котором они были прочитаны. По возвращении этот считыватель будет в конце потока. Этот метод не закрывает ни чтения, ни записи. Этот метод может заблокировать на неопределенное время чтение из модуля чтения или запись в модуль записи. Поведение в случае асинхронного закрытия модуля чтения и/или записи или прерывания потока во время передачи сильно зависит от модуля чтения и записи и поэтому не специфицируется.
Если при чтении из устройства чтения или записи в устройство записи возникает ошибка ввода-вывода, то это может произойти после того, как некоторые символы были прочитаны или записаны. Следовательно, считыватель может не находиться в конце потока, а один или оба потока могут находиться в несогласованном состоянии. Настоятельно рекомендуется немедленно закрыть оба потока в случае возникновения ошибки ввода-вывода.
Итак, чтобы записать содержимое 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);
}
}
Подробнее о вводе и выводе см. в The Really Big Index Индекс
Конструктор BufferedWriter не перегружен для приема читателей, верно? то, что сказал Бухб, было правильным.
BufferedWriter writer = new BufferedWriter(
new FileWriter("filename_towrite"));
IOUtils.copy(new InputStreamReader(new FileInputStream("filename_toread")), writer);
writer.flush();
writer.close();
Вы можете использовать Piped Read/Writers (ссылка ). Это именно то, для чего они предназначены. Не уверен, что вы могли бы перенастроить их на существующий буферизованный ридер, который вы передали. Вы должны были бы создать buf reader самостоятельно вокруг него.