改findbogs碰到的两个问题,一个是关于IO流,一个是关于空指针检查异常。

1.NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE

前面代码略。。。

 File crFile = new File(crFilelocalPath);
if (crFile.exists()&& crFile.isDirectory() && crFile.listFiles() != null
&& crFile.listFiles().length > 0) { //略。。。 } 后面略。。。。

原因分析:

问题出在 crFile.listFiles() ,google到,说是第一个 crFile.listFiles()判断不为null,但是第二个crFile.listFiles()还是可能会为null。(原文:If the first call of listFiles() is != null, that doesn't mean the second call is also != null.)

google原文见:https://sourceforge.net/p/findbugs/bugs/1468/

所以改为

前面略。。

     File crFile = new File(crFilelocalPath);
if (crFile.exists() && crFile.isDirectory()) {
File[] files = crFile.listFiles();
if (files != null && files.length > 0) {
//略。。。
}
}
后面略。。。

findbugs就不报错了。。。

2.OBL_UNSATISFIED_OBLIGATION

是关于IO流的关闭

findbugs报错的代码

 public static boolean storeFile2LocalPath(String fileName, String localPath, File fileInput) {
boolean success = false;
FileInputStream inputStream = null;
OutputStream os = null;
try {
inputStream = new FileInputStream(fileInput);
//保存到临时文件
byte[] bs = new byte[1024];// 1K的数据缓冲
int len;// 读取到的数据长度
// 输出的文件流保存到本地文件
File tempFile = new File(localPath);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
String filePath = tempFile.getPath() + File.separator + fileName;
os = new FileOutputStream(filePath);
log.info("storeFile2LocalPath() and filePath = " + filePath);
// 开始读取
while ((len = inputStream.read(bs)) != -1) {
os.write(bs, 0, len);
}
success = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
// 完毕,关闭所有链接
try {
if(os != null) {
os.close();
os = null;
}
if(inputStream != null){
inputStream.close();
inputStream = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
return success;
}

报错如下:

This method may fail to clean up (close, dispose of) a stream, 
database object, or other resource requiring an explicit cleanup 
operation.

In general, if a method opens a stream or other resource, the method 
should use a try/finally block to ensure that the stream or resource 
is cleaned up before the method returns.

This bug pattern is essentially the same as the **OS_OPEN_STREAM and 
ODR_OPEN_DATABASE_RESOURCE** bug patterns, but is based on a different 
(and hopefully better) static analysis technique. We are interested is 
getting feedback about the usefulness of this bug pattern. To send 
feedback, either: •send email to findbugs@cs.umd.edu •file a bug 
report: http://findbugs.sourceforge.net/reportingBugs.html

In particular, the false-positive suppression heuristics for this bug 
pattern have not been extensively tuned, so reports about false 
positives are helpful to us.

See Weimer and Necula, Finding and Preventing Run-Time Error Handling 
Mistakes, for a description of the analysis technique.

原因分析:

连续关闭两个流,在同一个finally快里,若第一个流close失败,出现异常时,会导致第二个流没有关闭。

所以改为如下方式,findbugs不报错了。

//将后面的finally块改为: 再嵌套一个finally块

finally {
// 完毕,关闭所有链接
try {
if (os != null) {
os.close();
os = null;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
inputStream = null;
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}

原!findbugs:NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE 和 OBL_UNSATISFIED_OBLIGATION的更多相关文章

  1. FindBugs插件的使用手册

    安装FindBugs直接查找eclipse的商店,查找spot Bugs 插件,安装即可 完成安装之后重启eclipse,右击项目文件或目录,会发现多了Findbugs的菜单: 使用Findbugs ...

  2. findBugs英文代号的对照表

    findBugs错误英文翻译rule.findbugs.IMSE_DONT_CATCH_IMSE.name=不良实践 - 捕获可疑IllegalMonitorStateException rule.f ...

  3. 使用SpotBugs/FindBugs进行代码检查

    原po:https://blog.csdn.net/zhangb00/article/details/8407070 SpotBugs 介绍 SpotBugs是Findbugs的继任者(Findbug ...

  4. Findbugs异常总汇

    FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查 ...

  5. findbugs规则

    FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查 ...

  6. FindBugs报错

    FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查 ...

  7. 详解FindBugs的各项检测器 .

    FindBugs是一个静态分析工具,在程序不需运行的情况下,分析class文件,将字节码与一组缺陷模式进行对比,试图寻找真正的缺陷或者潜在的性能问题.本文档主要详细说明FindBugs 2.0.3版本 ...

  8. [Done]FindBugs: boxing/unboxing to parse a primitive

    在开发过程中遇到了以下问题: FindBugs: boxing/unboxing to parse a primitive 查看代码(左边是老代码,右边是新的): 问题出在 自动装箱和拆箱的检查. 参 ...

  9. MyEclipse使用总结——将原有的MyEclipse中的项目转成maven项目[转]

    前面一篇文章中我们了解了 在myeclipse中新建Maven框架的web项目 那么如果我们原来有一些项目现在想转成maven项目应该怎么做呢 我收集到了三种思路: 一.新建一个maven项目,把原项 ...

随机推荐

  1. atitit。全局变量的设计与实现 java php的异同

    atitit.全局变量的设计与实现 java php的异同 1. 超级全局(Superglobals)"变量 1 2. 全局变量和"global"关键字 1 3. 更加好 ...

  2. 基于Java语言开发jt808、jt809技术文章精华索引

    很多技术开发人员喜欢追逐最新的技术,如Node.js, go等语言,这些语言只是解决了某一个方面,如只是擅长异步高并发等等,却在企业管理后台开发方面提供的支持非常不够,造成项目团队技术选项失败,开发后 ...

  3. ListView嵌套GridView使用详解及注意事项

    ListView嵌套GridView即ListView的每个Item中都包含一个GridView:需要注意的是由于ListView和GridView都是可滑动的控件. 所以需要自定义GridView, ...

  4. 本地运行storm时报错

    java.lang.NoClassDefFoundError: backtype/storm/topology/IRichSpout at java.lang.Class.getDeclaredMet ...

  5. Servlet -doGet() doPost()原理

    一.自定义类只需要重写doGet(HttpServletRequest request, HttpServletResponse response) 和doPost(HttpServletReques ...

  6. poj3041 Asteroids 匈牙利算法 最小点集覆盖问题=二分图最大匹配

    /** 题目:poj3041 Asteroids 链接:http://poj.org/problem?id=3041 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一把枪,每一发子弹可 ...

  7. mysql—Access denied for user 'root'@'localhost' (using password:NO)

    安装mysql未设置初始密码,登录提示Access denied for user 'root'@'localhost' (using password:NO): 解决方案:  sudo /etc/i ...

  8. cocos2dx-是男人就坚持20s 练手项目

    前言 前段时间心血来潮看了下app游戏方面的东西 ,对比了下各种技术和市场招聘情况,赶脚cocos2dx在2D游戏方向还算是大有所为,遂找了几个基础教程看看了解了解.并附上一个简单demo作为成果 准 ...

  9. PAT003 List Leaves

    题目: Given a tree, you are supposed to list all the leaves in the order of top down, and left to righ ...

  10. Python中3元运算符的实现

    这是今天在温习lambda表达式的时候想到的问题,众所周知C系列语言中的 三元运算符(?:)是一个非常好用的语句, 关于C中的三元运算符表达式1?表达式2:表达式3 那么在python应该如何实现呢, ...