code: public static BufferedImage read(File input) throws IOException {
  		if (input == null) {
  			throw new IllegalArgumentException("input == null!");
  		}
  		if (!input.canRead()) {
  			throw new IIOException("Can't read input file!");
  		}
  
  		ImageInputStream stream = createImageInputStream(input);
  		if (stream == null) {
  			throw new IIOException("Can't create an ImageInputStream!");
  		}
  		BufferedImage bi = read(stream);
  		if (bi == null) {
  			stream.close();
  		}
  		return bi;
  	}
docs: Returns a <code>BufferedImage</code> as the result of decoding a supplied <code>File</code> with an
  <code>ImageReader</code> chosen automatically from among those currently registered. The
  <code>File</code> is wrapped in an <code>ImageInputStream</code>. If no registered
  <code>ImageReader</code> claims to be able to read the resulting stream, <code>null</code> is returned.
  
  <p>
  The current cache settings from <code>getUseCache</code>and <code>getCacheDirectory</code> will be used
  to control caching in the <code>ImageInputStream</code> that is created.
  
  <p>
  Note that there is no <code>read</code> method that takes a filename as a <code>String</code>; use this
  method instead after creating a <code>File</code> from the filename.
  
  <p>
  This method does not attempt to locate <code>ImageReader</code>s that can read directly from a
  <code>File</code>; that may be accomplished using <code>IIORegistry</code> and
  <code>ImageReaderSpi</code>.
  
  @param input
  a <code>File</code> to read from.
  
  @return a <code>BufferedImage</code> containing the decoded contents of the input, or <code>null</code>
  .
  
  @exception IllegalArgumentException
  if <code>input</code> is <code>null</code>.
  @exception IOException
  if an error occurs during reading.