writeDataToFile(String)可能无法在FindBugs中的已检查异常上清理java.io.Writer

时间:2018-07-13 06:26:29

标签: android findbugs

我正在使用FileWrite类将其写入文件,并且工作正常。但是FindBugs在我的代码段中为我指出了一个小问题。

代码段:

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd");
        Date now = new Date();
        String fileName = formatter.format(now) + ".txt";
        FileWriter writer = null;
        try {
            File root = new File(Environment.getExternalStorageDirectory(), "Test");
            if (!root.exists()) {
                root.mkdirs();
            }
            File gpxfile = new File(root, fileName);

            writer = new FileWriter(gpxfile, true);
            writer.append(text + "\n\n");

        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            if (writer != null) {
                try {
                    writer.flush();
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

发现错误的报告:

OBL_UNSATISFIED_OBLIGATION:方法可能无法清除流或资源 writeDataToFile(String)可能无法在检查到的异常上清除java.io.Writer

我在哪一行出现此错误?

  writer = new FileWriter(gpxfile, true);

有人可以告诉我这到底是什么吗? 而我们该如何解决呢?

1 个答案:

答案 0 :(得分:1)

由于writer.flush();,您收到此错误。这可能导致IOException,因为它将任何缓冲的输出写入基础流。如果发生异常,编写器将不会关闭。

如果必须在finally{..}中刷新,则对每行使用专用的try{..} catch{..},如下所示:

finally {
    if (writer != null) {
        try {
            writer.flush();                
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}