You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Michele Mariotti (JIRA)" <ji...@apache.org> on 2017/11/04 11:18:00 UTC

[jira] [Created] (IO-554) copyToFile(InputStream source, File destination) closes input stream

Michele Mariotti created IO-554:
-----------------------------------

             Summary: copyToFile(InputStream source, File destination) closes input stream
                 Key: IO-554
                 URL: https://issues.apache.org/jira/browse/IO-554
             Project: Commons IO
          Issue Type: Bug
          Components: Streams/Writers
    Affects Versions: 2.6
            Reporter: Michele Mariotti
            Priority: Blocker
             Fix For: 2.7


In 2.6 this method is closing the input stream, while the javadoc states the opposite.
The correct behavior is to leave the stream open, as stated in the javadoc.

I assigned a high priority because this incorrect behavior breaks existing code, especially when used in combination with ZipInputStream.

{code:java}
/**
 * Copies bytes from an {@link InputStream} <code>source</code> to a file
 * <code>destination</code>. The directories up to <code>destination</code>
 * will be created if they don't already exist. <code>destination</code>
 * will be overwritten if it already exists.
 * The {@code source} stream is left open, e.g. for use with {@link java.util.zip.ZipInputStream ZipInputStream}.
 * See {@link #copyInputStreamToFile(InputStream, File)} for a method that closes the input stream.
 *
 * @param source      the <code>InputStream</code> to copy bytes from, must not be {@code null}
 * @param destination the non-directory <code>File</code> to write bytes to
 *                    (possibly overwriting), must not be {@code null}
 * @throws IOException if <code>destination</code> is a directory
 * @throws IOException if <code>destination</code> cannot be written
 * @throws IOException if <code>destination</code> needs creating but can't be
 * @throws IOException if an IO error occurs during copying
 * @since 2.5
 */
public static void copyToFile(final InputStream source, final File destination) throws IOException {
	try (InputStream in = source;
		 OutputStream out = openOutputStream(destination)) {
		IOUtils.copy(in, out);
	}
}
{code}

instead it should be:

{code:java}
public static void copyToFile(final InputStream source, final File destination) throws IOException {
	try (OutputStream out = openOutputStream(destination)) {
		IOUtils.copy(source, out);
	}
}{code}





--
This message was sent by Atlassian JIRA
(v6.4.14#64029)