我正在使用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);
有人可以告诉我这到底是什么吗? 而我们该如何解决呢?
答案 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();
}
}
}