[ https://issues.apache.org/jira/browse/IO-554?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16239579#comment-16239579 ]
Jochen Wiedmann commented on IO-554: ------------------------------------ For the sake of binary compatibility, I'd suggest an alternate proposal: - Change the Javadocs of FileUtils.copyToFile to reflect the current situation. - Introduce a new method copyToFile(InputStream, File, boolean), which is basically doing the same than the old implementation, except that the last parameter decides upon closing, or not. > FileUtils.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 > Assignee: Bruno P. Kinoshita > Priority: Blocker > Labels: regression > 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)