Buffered Writer 和 Reader Proper order/use

Buffered Writer and Reader Proper order/use

所以我不确定我的错误在 BufferedWriter 和 BufferedReader 的 order/use 哪里。你自己看。 除了这些方法外,我的程序都有效。这是我声明东西的地方,很确定这里没有错误。

        fw = new FileWriter(file, true); 
        bw = new BufferedWriter(fw); 
        fr = new FileReader(file);
        br = new BufferedReader(fr);

现在这是将内容添加到文件的方法,很确定这个方法有效:

public static void addStuff(String toAdd){
    f.format("%s ", toAdd);
    try {
        bw.write(toAdd);
    } catch (IOException e) {               
        e.printStackTrace();
        System.out.println("Error at addstuff");
    }
    System.out.printf("%s added", toAdd);
    System.out.println();
}

最后但同样重要的是,我很确定我做错了方法。这一个读取刚刚添加到的文件。

public List<String> readFile(){ //return a list off stuff
    try{
        String line = br.readLine();
        stuff.add(line);
    }
    catch(IOException ioe){
        System.out.println("Error at readFile");
    }
    return stuff;
}

我遇到的错误是当通过readFile()方法读取文件时打印出'null',所以程序要么没有正确读取,要么没有正确写入。 像这样:

hi added
null 

提前致谢,喜欢这里的 java 编程社区。

readLine() 可以 return null,表示流结束:在本例中为文件结束。您的代码不允许这种可能性,也不允许在这种可能性发生时向调用方报告。

我会完全摆脱 readFile() 方法,取而代之的是调用 readLine(), 测试结果是否为空,如果是则关闭文件并停止读取,否则将行添加到collection.

您的异常处理和日志记录也很差。您一直在捕获异常,记录它们,然后继续处理,就好像它们没有发生过一样。例如,在 readFile(), 中,即使在失败后您也会记录成功。依赖于 try 块中代码成功的代码应该在同一个 try 块中。