Próbuję znaleźć błędy w naszym dotychczasowym kodzie za pomocą findBugs. W jednej z metod findBugs podaje błąd OBL_UNSATISFIED_OBLIGATION. Sprawdziłem, czy wszystkie strumienie są poprawnie zamknięte. Oto fragment kodu:FindBugs OBL_UNSATISFIED_OBLIGATION
FileWriter fw = null;
FileReader fr = null;
try {
if (!new File(filePath).exists()) {
requiredStrings = CommandUtils.invoke(filename);
fw = new FileWriter(filePath);
fw.write(requiredStrings);
} else {
StringBuilder sb = new StringBuilder();
fr = new FileReader(filePath);
char[] buffer = new char[BLOCK_READ_SIZE];
int bytesRead;
while (-1 != (bytesRead = fr.read(buffer, 0, BLOCK_READ_SIZE))) {
sb.append(buffer, 0, bytesRead);
}
requiredStrings = sb.toString();
}
} finally {
if (fw != null) {
fw.close();
}
if (fr != null) {
fr.close();
}
}
return requiredStrings;
Błąd mówi, że Obowiązek oczyścić resurces w nie rozładowany, ścieżka nadal na linii .... .... pozostałych zobowiązań {Reader x 1, x-1 Writer }
Być może narzeka, że nie przechwytujesz wyjątków od 'close()', więc 'fr' może pozostać niezamknięty, jeśli' fw.close() 'wyrzuci. Ponadto, [_ "heurystyki fałszywie dodatnie dla tego wzorca błędu nie zostały dokładnie dostrojone, więc raporty dotyczące fałszywych alarmów są dla nas pomocne." _] (Http://findbugs.sourceforge.net/bugDescriptions.html#OBL_UNSATISFIED_OBLIGATION) –
Zobacz to: [Java zamykania połączeń i findbugs] [1] [1]: http://stackoverflow.com/questions/4398386/java-closing-connections-and-findbugs – zhaoyuanjie