Molte risorse di I/O in Java come InputStream e OutputStream devono essere chiuse al termine, come illustrato in here.Come trovare le risorse I/O non chiuse in Java?
Come posso cercare nel mio progetto i luoghi in cui tali risorse non vengono chiuse, ad es. questo tipo di errore:
private void readFile(File file) throws IOException {
InputStream in = new FileInputStream(file);
int nextByte = in.read();
while (nextByte != -1) {
// Do something with the byte here
// ...
// Read the next byte
nextByte = in.read();
}
// Oops! Not closing the InputStream
}
Ho provato alcuni strumenti di analisi statica, come PMD e FindBugs, ma non lo fanno bandiera il codice di cui sopra come essere sbagliato.
FindBugs sembra essere in grado di rilevare questo, però: http://stackoverflow.com/questions/2570820/findbugs-may-fail-to-close-stream-is-this-valid-in-case-of- inputstream – Thilo
Sembra che sia necessario regolare quali regole FindBugs controlla –