The usual, pre-Java 1.7 wiggle:
private void foo( URL url ) { InputStream input = null; try { input = url.openStream(); // reads the stream, throws IOException } catch( IOException ex ) { throw new RuntimeException( ex ); } finally { if( input != null ) input.close(); } }
Better—and let's avoid the whole null nightmare:
private void foo( URL url ) throws IOException { final InputStream input = url.openStream(); try { // reads the stream, throws IOException } catch( IOException ex ) { throw new RuntimeException( ex ); } finally { input.close(); } }
If opening the resource also throws an exception:
private void foo( URL url ) { final InputStream input; try { input = url.openStream(); } catch( IOException ex ) { throw new RuntimeException( ex ); } try { // reads the stream, throws IOException } catch( IOException ex ) { throw new RuntimeException( ex ); } finally { input.close(); } }