Чтение файла в ошибке Java - PullRequest
0 голосов
/ 24 марта 2012

Привет! Я использую Buffered Reader, чтобы попытаться прочитать текстовый файл и напечатать, сколько строк в текстовом файле. Мой код выглядит так ...

File parent = new File("/Desktop/Test Folder");
File text = new File(parent, "/text.txt");
FileWriter fw;
FileReader fr;
BufferedWriter write;
BufferedReader read;
if (!parent.exists()) {
        parent.mkdir();
    }
    try {
        text.createNewFile();
    } catch (Exception ex) {
        System.err.println("Error creating file");
    }
    try {
        fw = new FileWriter(text);
        fr = new FileReader(text);
        write = new BufferedWriter(fw);
        read = new BufferedReader(fr);
    } catch (Exception ex) {
        System.err.println("Error trying to write or read file");
    }
    System.out.println("Writing to file...");
try {
        write.write("String number one.\n");
        write.write("String number two.\n");
        List<String> lines = new LinkedList<String>();
        String line = read.readLine();
        while (line != null) {
            lines.add(line);
            line = read.readLine();
        }
        System.out.printf("Number of lines is %d.\n", lines.size());
        write.flush();
        write.close();
    } catch (Exception ex) {
        System.err.println("Error writing to file");
    }

Когда я запускаю это, он говорит, что в строках списка 0 элементов. Любая помощь? Я где-то допустил ошибку или использую неправильный метод? Я любитель, поэтому я подозреваю, что ошибка очевидна. В любом случае, кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Вы пытались переместить вызов writer.flush(); перед вызовом readLine()?

Из документации из Writer.flush():

Очистить поток. Если поток сохранил какие-либо символы из различных методов write () в буфере, немедленно запишите их в место назначения

Так что, если вы читаете перед сбросом, ваш файл может быть пустым!

0 голосов
/ 24 марта 2012

Вы должны поместить flush () и close () Writer перед фактическим чтением. То, что вы пытаетесь сделать, это использовать файл как канал. Я думаю, это не то, что вы хотите.

...