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)

Reply via email to