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)