Java: filereader и filewriter не работают вместе

Итак, я пытаюсь создать программу, которая может писать, а затем читать один и тот же текстовый файл, используя только FileWriter и FileReader, но по какой-то причине, когда я помещаю оба этих класса в один и тот же код, FileWriter работает правильно, но FileReader нет, и я получаю пустой результат.

import java.io.*;
import java.util.Scanner;
public class ex2 {
    public static void main(String[] args) {
        File file = new File("C:\\a.txt");
        Scanner scanner = new Scanner(System.in);
        try {
            FileReader reader = new FileReader(file);
            FileWriter writer = new FileWriter(file);
            writer.write(scanner.nextLine());
            int ch;
            while ((ch = reader.read()) != -1) {
                System.out.println((char)ch);
            }
            scanner.close();
            reader.close();
            writer.close();
        } catch (Exception e) {

        }

    }
}

Это код, о котором я говорю. Я могу записать что угодно в a.txt, но читатель, похоже, не может ничего прочитать. Странная часть заключается в том, что если я использую тот же самый код, но без частей для записи файла, FileReader работает нормально, как и должен. Что я делаю неправильно? Заранее спасибо!

Попробуйте сделать writer.flush(); сразу после writer.write(...);

bcr666 13.09.2018 18:08
0
1
307
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Объекты FileWriter помещаются в буфер. Это означает, что они не будут писать все, что вы им дадите, как только вы позвоните в write. Они будут ждать, пока у них будет определенная сумма, которую нужно написать, а затем напишут все сразу. Просто добавьте эту строку:

writer.flush();

между вашим письмом и чтением.

О, я вижу, это отлично сработало! И большое спасибо за объяснение!

Merto 13.09.2018 18:13

@Merto Рад, что смог помочь!

mypetlion 13.09.2018 18:18

@Merto, если вы нашли этот ответ полезным, и это тот, который вы приняли, установите зеленую галочку слева, чтобы выразить признательность автору.

bcr666 13.09.2018 18:38

Другие вопросы по теме