BufferedReader затем записывает в текстовый файл?

Можно ли использовать BufferedReader для чтения из текстового файла, а затем, пока буферизованный считыватель читает, в то же время он также сохраняет прочитанные строки в другой текстовый файл с помощью PrintWriter?


person Winter Leong    schedule 12.07.2013    source источник
comment
Да, это возможно. Должен ли я ввести это как ответ?   -  person Andrew Thompson    schedule 12.07.2013
comment
Почему бы просто не использовать два FileChannel и использовать .transfer{From,To}()?   -  person fge    schedule 12.07.2013
comment
@fge ммм, не могли бы вы привести пример того, как его использовать?   -  person Winter Leong    schedule 12.07.2013
comment
Зависит от того, какую версию Java вы используете. Если это Java 7, он будет намного короче.   -  person fge    schedule 12.07.2013
comment
@fge ммм, я думаю, я использую 7.   -  person Winter Leong    schedule 12.07.2013
comment
Хорошо, другой вопрос: вам действительно нужно читать построчно?   -  person fge    schedule 13.07.2013


Ответы (4)


Если вы используете Java 7 и хотите скопировать один файл непосредственно в другой, это так же просто, как:

final Path src = Paths.get(...);
final Path dst = Paths.get(...);
Files.copy(src, dst);

Если вы хотите прочитать строку за строкой и снова написать, возьмите src и dst так же, как указано выше, затем выполните:

final BufferedReader reader;
final BufferedWriter writer;
String line;

try (
    reader = Files.newBufferedReader(src, StandardCharsets.UTF_8);
    writer = Files.newBufferedWriter(dst, StandardCharsets.UTF_8);
) {
    while ((line = reader.readLine()) != null) {
        doSomethingWith(line);
        writer.write(line);
        // must do this: .readLine() will have stripped line endings
        writer.newLine();
    }
}
person fge    schedule 12.07.2013

Чтобы напрямую ответить на ваш вопрос:

вы можете, и вы также можете использовать BufferedWriter для этого.

BufferedReader br = new BufferedReader(new FileReader(new File("Filepath")));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("Filepath")));
String l;
while((l=br.readLine())!=null){

    ... do stuff ...

    bw.write("what you did");

}

bw.close();
person user2577773    schedule 12.07.2013

да. Откройте файл BufferedReader, а затем создайте файл PrintWriter. Вы можете читать из потока, когда пишете в модуль записи.

person Chase    schedule 12.07.2013

Если вам просто нужно скопировать без проверки данных, тогда это будет одна строка:
IOUtils.copy(reader, printWriter);

person Gili Nachum    schedule 01.11.2013