Java – resource leak: ‘in’ has never been closed, even though it is closed
•
Java
I know there are several similar problems here, but most people have forgotten to put a close () instruction in their stream This is different@ H_ 404_ 2 @ let me say I have the following smallest example:
public void test() throws IOException { InputStream in; if( file.exists() ) { in = new FileInputStream( file ); } else { in = new URL( "some url" ).openStream(); } in.close(); }
public void test() throws IOException { InputStream in; if( file.exists() ) { in = new GZIPInputStream( new FileInputStream( file ) ); in.close(); } else { in = new URL( "some URL" ).openStream(); } }
Solution
This is how I write:
public void test() throws IOException { InputStream in = null; try { if(file.exists()) { in = new FileInputStream( file ); } else { in = new URL( "some url" ).openStream(); } // Do something useful with the stream. } finally { close(in); } } public static void close(InputStream is) { try { if (is != null) { is.close(); } } catch (IOException e) { e.printStackTrace(); } }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码