Sto cercando di trovare dei bug nel nostro codice legacy usando findBugs. In uno dei metodi, findBugs sta dando l'errore OBL_UNSATISFIED_OBLIGATION. Ho verificato che tutti i flussi siano correttamente chiusi. Ecco il frammento di codice: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;
L'errore dice che Obbligo di ripulire resurces a non scaricata, il percorso continua a .... linea .... obblighi rimanenti {Reader x 1, Scrittore x-1 }
Forse si lamenta che non si rilevano eccezioni da 'close()' in modo che 'fr' possa essere lasciato libero se getta fw.close()'. Inoltre, [_ "l'euristica di soppressione del falso positivo per questo modello di bug non è stata ampiamente ottimizzata, quindi i rapporti sui falsi positivi ci sono utili." _] (Http://findbugs.sourceforge.net/bugDescriptions.html#OBL_UNSATISFIED_OBLIGATION) –
Vedere questo: [Java chiusura delle connessioni e findbugs] [1] [1]: http://stackoverflow.com/questions/4398386/java-closing-connections-and-findbugs – zhaoyuanjie