缓冲的Writer和Reader正确的订单/使用

时间:2015-05-27 01:04:59

标签: java logic bufferedreader bufferedwriter

所以我不确定我的错误在于BufferedWriter和BufferedReader的顺序/使用。你自己看。 我的程序除了这些方法外都可以工作。这是我宣称的东西,非常肯定错误不在这里。

        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编程社区。

1 个答案:

答案 0 :(得分:1)

readLine()可以返回null,这意味着流结束:在这种情况下,文件结束。您的代码不允许这种可能性,并且它也不允许在调用者发生时向调用者报告该可能性。

我会完全摆脱readFile()方法,并在其位置调用readLine(),测试结果为null,关闭文件并停止读取(如果是这样),否则将该行添加到集合中。

您的异常处理和日志记录也很差。您始终捕获异常,记录异常,然后继续进行,就好像它们没有发生一样。例如,在readFile(),中,即使发生故障,您也会记录成功。取决于try块中代码成功的代码应该在同一个try块内。