You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2013/05/08 16:36:32 UTC

svn commit: r1480300 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/FileUtils.java

Author: ggregory
Date: Wed May  8 14:36:32 2013
New Revision: 1480300

URL: http://svn.apache.org/r1480300
Log:
<action issue="IO-381" dev="ggregory" type="add">
        Add FileUtils.copyInputStreamToFile API with option to leave the source open.
        See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
      </action>

Modified:
    commons/proper/io/trunk/src/changes/changes.xml
    commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java

Modified: commons/proper/io/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1480300&r1=1480299&r2=1480300&view=diff
==============================================================================
--- commons/proper/io/trunk/src/changes/changes.xml (original)
+++ commons/proper/io/trunk/src/changes/changes.xml Wed May  8 14:36:32 2013
@@ -47,7 +47,11 @@ The <action> type attribute can be add,u
   <body>
     <!-- The release date is the date RC is cut -->
     <release version="2.5" date="2013-??-??" description="New features and bug fixes.">    
-      <action issue="IO-380" dev="sebb" type="fix">
+      <action issue="IO-381" dev="ggregory" type="add">
+        Add FileUtils.copyInputStreamToFile API with option to leave the source open.
+        See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
+      </action>            
+      <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch">
         FileUtils.copyInputStreamToFile should document it closes the input source
       </action>            
       <action issue="IO-279" dev="sebb" type="fix">

Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1480300&r1=1480299&r2=1480300&view=diff
==============================================================================
--- commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java (original)
+++ commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java Wed May  8 14:36:32 2013
@@ -1459,8 +1459,7 @@ public class FileUtils {
      * @throws IOException if an IO error occurs during copying
      */
     public static void copyURLToFile(final URL source, final File destination) throws IOException {
-        final InputStream input = source.openStream();
-        copyInputStreamToFile(input, destination);
+        copyInputStreamToFile(source.openStream(), destination);
     }
 
     /**
@@ -1488,8 +1487,7 @@ public class FileUtils {
         final URLConnection connection = source.openConnection();
         connection.setConnectTimeout(connectionTimeout);
         connection.setReadTimeout(readTimeout);
-        final InputStream input = connection.getInputStream();
-        copyInputStreamToFile(input, destination);
+        copyInputStreamToFile(connection.getInputStream(), destination);
     }
 
     /**
@@ -1509,6 +1507,27 @@ public class FileUtils {
      * @since 2.0
      */
     public static void copyInputStreamToFile(final InputStream source, final File destination) throws IOException {
+        copyInputStreamToFile(source, destination, true);
+    }
+
+    /**
+     * 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.
+     *
+     * @param source  the <code>InputStream</code> to copy bytes from, must not be {@code null}, will be closed
+     * @param destination  the non-directory <code>File</code> to write bytes to
+     *  (possibly overwriting), must not be {@code null}
+     * @param closeSource If true, closes the <code>source</code>
+     * @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 copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource) 
+            throws IOException {
         try {
             final FileOutputStream output = openOutputStream(destination);
             try {
@@ -1518,7 +1537,9 @@ public class FileUtils {
                 IOUtils.closeQuietly(output);
             }
         } finally {
-            IOUtils.closeQuietly(source);
+            if (closeSource) {
+                IOUtils.closeQuietly(source);
+            }
         }
     }
 



Re: svn commit: r1480300 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/FileUtils.java

Posted by sebb <se...@gmail.com>.
On 8 May 2013 17:45, Gary Gregory <ga...@gmail.com> wrote:
> On Wed, May 8, 2013 at 12:14 PM, sebb <se...@gmail.com> wrote:
>
>> On 8 May 2013 15:51, Gary Gregory <ga...@gmail.com> wrote:
>> > Sebb,
>> >
>> > Are you suggesting making copyInputStreamToFile(InputStream, File,
>> boolean)
>> > private and adding a public method like copyToFile(InputStream, File)
>> that
>> > calls it with false?
>>
>> Not exactly.
>>
>> I'm saying that it does not make sense to me for that method to be public.
>> Instead we should have a new method that provides the no close behaviour.
>>
>> Whether the old and new behaviour have their own code or delegate to a
>> 3rd private method is another matter.
>> In fact it occurs to me that:
>>
>> copyInputStreamToFile(InputStream, File)
>> could just call
>> copyToFile(InputStream, File)
>> and then close the input.
>>
>
> OK, like revision 1480346 then?

Yes, except for the Javadoc copy/paste error, which I have just corrected.

> Gary
>
>>
>> > Gary
>> >
>> >
>> >
>> > On Wed, May 8, 2013 at 10:45 AM, sebb <se...@gmail.com> wrote:
>> >
>> >> On 8 May 2013 15:36,  <gg...@apache.org> wrote:
>> >> > Author: ggregory
>> >> > Date: Wed May  8 14:36:32 2013
>> >> > New Revision: 1480300
>> >> >
>> >> > URL: http://svn.apache.org/r1480300
>> >> > Log:
>> >> > <action issue="IO-381" dev="ggregory" type="add">
>> >> >         Add FileUtils.copyInputStreamToFile API with option to leave
>> the
>> >> source open.
>> >> >         See copyInputStreamToFile(final InputStream source, final File
>> >> destination, boolean closeSource)
>> >> >       </action>
>> >> >
>> >> > Modified:
>> >> >     commons/proper/io/trunk/src/changes/changes.xml
>> >> >
>> >>
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> >> >
>> >> > Modified: commons/proper/io/trunk/src/changes/changes.xml
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1480300&r1=1480299&r2=1480300&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > --- commons/proper/io/trunk/src/changes/changes.xml (original)
>> >> > +++ commons/proper/io/trunk/src/changes/changes.xml Wed May  8
>> 14:36:32
>> >> 2013
>> >> > @@ -47,7 +47,11 @@ The <action> type attribute can be add,u
>> >> >    <body>
>> >> >      <!-- The release date is the date RC is cut -->
>> >> >      <release version="2.5" date="2013-??-??" description="New
>> features
>> >> and bug fixes.">
>> >> > -      <action issue="IO-380" dev="sebb" type="fix">
>> >> > +      <action issue="IO-381" dev="ggregory" type="add">
>> >> > +        Add FileUtils.copyInputStreamToFile API with option to leave
>> >> the source open.
>> >> > +        See copyInputStreamToFile(final InputStream source, final
>> File
>> >> destination, boolean closeSource)
>> >> > +      </action>
>> >> > +      <action issue="IO-380" dev="sebb" type="fix"
>> due-to="claudio_ch">
>> >> >          FileUtils.copyInputStreamToFile should document it closes the
>> >> input source
>> >> >        </action>
>> >> >        <action issue="IO-279" dev="sebb" type="fix">
>> >> >
>> >> > Modified:
>> >>
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> >> > URL:
>> >>
>> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1480300&r1=1480299&r2=1480300&view=diff
>> >> >
>> >>
>> ==============================================================================
>> >> > ---
>> >>
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> >> (original)
>> >> > +++
>> >>
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> >> Wed May  8 14:36:32 2013
>> >> > @@ -1459,8 +1459,7 @@ public class FileUtils {
>> >> >       * @throws IOException if an IO error occurs during copying
>> >> >       */
>> >> >      public static void copyURLToFile(final URL source, final File
>> >> destination) throws IOException {
>> >> > -        final InputStream input = source.openStream();
>> >> > -        copyInputStreamToFile(input, destination);
>> >> > +        copyInputStreamToFile(source.openStream(), destination);
>> >>
>> >> That really belonged in a separate commit.
>> >>
>> >> >      }
>> >> >
>> >> >      /**
>> >> > @@ -1488,8 +1487,7 @@ public class FileUtils {
>> >> >          final URLConnection connection = source.openConnection();
>> >> >          connection.setConnectTimeout(connectionTimeout);
>> >> >          connection.setReadTimeout(readTimeout);
>> >> > -        final InputStream input = connection.getInputStream();
>> >> > -        copyInputStreamToFile(input, destination);
>> >> > +        copyInputStreamToFile(connection.getInputStream(),
>> destination);
>> >>
>> >> Ditto.
>> >>
>> >> >      }
>> >> >
>> >> >      /**
>> >> > @@ -1509,6 +1507,27 @@ public class FileUtils {
>> >> >       * @since 2.0
>> >> >       */
>> >> >      public static void copyInputStreamToFile(final InputStream
>> source,
>> >> final File destination) throws IOException {
>> >> > +        copyInputStreamToFile(source, destination, true);
>> >> > +    }
>> >> > +
>> >> > +    /**
>> >> > +     * 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.
>> >> > +     *
>> >> > +     * @param source  the <code>InputStream</code> to copy bytes
>> from,
>> >> must not be {@code null}, will be closed
>> >>
>> >> That's wrong.
>> >>
>> >> > +     * @param destination  the non-directory <code>File</code> to
>> write
>> >> bytes to
>> >> > +     *  (possibly overwriting), must not be {@code null}
>> >> > +     * @param closeSource If true, closes the <code>source</code>
>> >> > +     * @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 copyInputStreamToFile(final InputStream
>> source,
>> >> final File destination, boolean closeSource)
>> >> > +            throws IOException {
>> >>
>> >> -1
>> >>
>> >> I don't like this new method; as explained in  IO-381 there is no
>> >> reason for anyone to use
>> >>
>> >> copyInputStreamToFile(source, destination, true);
>> >>
>> >> as that is the same as
>> >>
>> >> copyInputStreamToFile(source, destination);
>> >>
>> >> >          try {
>> >> >              final FileOutputStream output =
>> >> openOutputStream(destination);
>> >> >              try {
>> >> > @@ -1518,7 +1537,9 @@ public class FileUtils {
>> >> >                  IOUtils.closeQuietly(output);
>> >> >              }
>> >> >          } finally {
>> >> > -            IOUtils.closeQuietly(source);
>> >> > +            if (closeSource) {
>> >> > +                IOUtils.closeQuietly(source);
>> >> > +            }
>> >> >          }
>> >> >      }
>> >> >
>> >> >
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> >> For additional commands, e-mail: dev-help@commons.apache.org
>> >>
>> >>
>> >
>> >
>> > --
>> > E-Mail: garydgregory@gmail.com | ggregory@apache.org
>> > Java Persistence with Hibernate, Second Edition<
>> http://www.manning.com/bauer3/>
>> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> > Spring Batch in Action <http://www.manning.com/templier/>
>> > Blog: http://garygregory.wordpress.com
>> > Home: http://garygregory.com/
>> > Tweet! http://twitter.com/GaryGregory
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1480300 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/FileUtils.java

Posted by Gary Gregory <ga...@gmail.com>.
On Wed, May 8, 2013 at 12:14 PM, sebb <se...@gmail.com> wrote:

> On 8 May 2013 15:51, Gary Gregory <ga...@gmail.com> wrote:
> > Sebb,
> >
> > Are you suggesting making copyInputStreamToFile(InputStream, File,
> boolean)
> > private and adding a public method like copyToFile(InputStream, File)
> that
> > calls it with false?
>
> Not exactly.
>
> I'm saying that it does not make sense to me for that method to be public.
> Instead we should have a new method that provides the no close behaviour.
>
> Whether the old and new behaviour have their own code or delegate to a
> 3rd private method is another matter.
> In fact it occurs to me that:
>
> copyInputStreamToFile(InputStream, File)
> could just call
> copyToFile(InputStream, File)
> and then close the input.
>

OK, like revision 1480346 then?

Gary

>
> > Gary
> >
> >
> >
> > On Wed, May 8, 2013 at 10:45 AM, sebb <se...@gmail.com> wrote:
> >
> >> On 8 May 2013 15:36,  <gg...@apache.org> wrote:
> >> > Author: ggregory
> >> > Date: Wed May  8 14:36:32 2013
> >> > New Revision: 1480300
> >> >
> >> > URL: http://svn.apache.org/r1480300
> >> > Log:
> >> > <action issue="IO-381" dev="ggregory" type="add">
> >> >         Add FileUtils.copyInputStreamToFile API with option to leave
> the
> >> source open.
> >> >         See copyInputStreamToFile(final InputStream source, final File
> >> destination, boolean closeSource)
> >> >       </action>
> >> >
> >> > Modified:
> >> >     commons/proper/io/trunk/src/changes/changes.xml
> >> >
> >>
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> >> >
> >> > Modified: commons/proper/io/trunk/src/changes/changes.xml
> >> > URL:
> >>
> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1480300&r1=1480299&r2=1480300&view=diff
> >> >
> >>
> ==============================================================================
> >> > --- commons/proper/io/trunk/src/changes/changes.xml (original)
> >> > +++ commons/proper/io/trunk/src/changes/changes.xml Wed May  8
> 14:36:32
> >> 2013
> >> > @@ -47,7 +47,11 @@ The <action> type attribute can be add,u
> >> >    <body>
> >> >      <!-- The release date is the date RC is cut -->
> >> >      <release version="2.5" date="2013-??-??" description="New
> features
> >> and bug fixes.">
> >> > -      <action issue="IO-380" dev="sebb" type="fix">
> >> > +      <action issue="IO-381" dev="ggregory" type="add">
> >> > +        Add FileUtils.copyInputStreamToFile API with option to leave
> >> the source open.
> >> > +        See copyInputStreamToFile(final InputStream source, final
> File
> >> destination, boolean closeSource)
> >> > +      </action>
> >> > +      <action issue="IO-380" dev="sebb" type="fix"
> due-to="claudio_ch">
> >> >          FileUtils.copyInputStreamToFile should document it closes the
> >> input source
> >> >        </action>
> >> >        <action issue="IO-279" dev="sebb" type="fix">
> >> >
> >> > Modified:
> >>
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> >> > URL:
> >>
> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1480300&r1=1480299&r2=1480300&view=diff
> >> >
> >>
> ==============================================================================
> >> > ---
> >>
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> >> (original)
> >> > +++
> >>
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> >> Wed May  8 14:36:32 2013
> >> > @@ -1459,8 +1459,7 @@ public class FileUtils {
> >> >       * @throws IOException if an IO error occurs during copying
> >> >       */
> >> >      public static void copyURLToFile(final URL source, final File
> >> destination) throws IOException {
> >> > -        final InputStream input = source.openStream();
> >> > -        copyInputStreamToFile(input, destination);
> >> > +        copyInputStreamToFile(source.openStream(), destination);
> >>
> >> That really belonged in a separate commit.
> >>
> >> >      }
> >> >
> >> >      /**
> >> > @@ -1488,8 +1487,7 @@ public class FileUtils {
> >> >          final URLConnection connection = source.openConnection();
> >> >          connection.setConnectTimeout(connectionTimeout);
> >> >          connection.setReadTimeout(readTimeout);
> >> > -        final InputStream input = connection.getInputStream();
> >> > -        copyInputStreamToFile(input, destination);
> >> > +        copyInputStreamToFile(connection.getInputStream(),
> destination);
> >>
> >> Ditto.
> >>
> >> >      }
> >> >
> >> >      /**
> >> > @@ -1509,6 +1507,27 @@ public class FileUtils {
> >> >       * @since 2.0
> >> >       */
> >> >      public static void copyInputStreamToFile(final InputStream
> source,
> >> final File destination) throws IOException {
> >> > +        copyInputStreamToFile(source, destination, true);
> >> > +    }
> >> > +
> >> > +    /**
> >> > +     * 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.
> >> > +     *
> >> > +     * @param source  the <code>InputStream</code> to copy bytes
> from,
> >> must not be {@code null}, will be closed
> >>
> >> That's wrong.
> >>
> >> > +     * @param destination  the non-directory <code>File</code> to
> write
> >> bytes to
> >> > +     *  (possibly overwriting), must not be {@code null}
> >> > +     * @param closeSource If true, closes the <code>source</code>
> >> > +     * @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 copyInputStreamToFile(final InputStream
> source,
> >> final File destination, boolean closeSource)
> >> > +            throws IOException {
> >>
> >> -1
> >>
> >> I don't like this new method; as explained in  IO-381 there is no
> >> reason for anyone to use
> >>
> >> copyInputStreamToFile(source, destination, true);
> >>
> >> as that is the same as
> >>
> >> copyInputStreamToFile(source, destination);
> >>
> >> >          try {
> >> >              final FileOutputStream output =
> >> openOutputStream(destination);
> >> >              try {
> >> > @@ -1518,7 +1537,9 @@ public class FileUtils {
> >> >                  IOUtils.closeQuietly(output);
> >> >              }
> >> >          } finally {
> >> > -            IOUtils.closeQuietly(source);
> >> > +            if (closeSource) {
> >> > +                IOUtils.closeQuietly(source);
> >> > +            }
> >> >          }
> >> >      }
> >> >
> >> >
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: dev-help@commons.apache.org
> >>
> >>
> >
> >
> > --
> > E-Mail: garydgregory@gmail.com | ggregory@apache.org
> > Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> > Spring Batch in Action <http://www.manning.com/templier/>
> > Blog: http://garygregory.wordpress.com
> > Home: http://garygregory.com/
> > Tweet! http://twitter.com/GaryGregory
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Re: svn commit: r1480300 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/FileUtils.java

Posted by sebb <se...@gmail.com>.
On 8 May 2013 15:51, Gary Gregory <ga...@gmail.com> wrote:
> Sebb,
>
> Are you suggesting making copyInputStreamToFile(InputStream, File, boolean)
> private and adding a public method like copyToFile(InputStream, File) that
> calls it with false?

Not exactly.

I'm saying that it does not make sense to me for that method to be public.
Instead we should have a new method that provides the no close behaviour.

Whether the old and new behaviour have their own code or delegate to a
3rd private method is another matter.
In fact it occurs to me that:

copyInputStreamToFile(InputStream, File)
could just call
copyToFile(InputStream, File)
and then close the input.

> Gary
>
>
>
> On Wed, May 8, 2013 at 10:45 AM, sebb <se...@gmail.com> wrote:
>
>> On 8 May 2013 15:36,  <gg...@apache.org> wrote:
>> > Author: ggregory
>> > Date: Wed May  8 14:36:32 2013
>> > New Revision: 1480300
>> >
>> > URL: http://svn.apache.org/r1480300
>> > Log:
>> > <action issue="IO-381" dev="ggregory" type="add">
>> >         Add FileUtils.copyInputStreamToFile API with option to leave the
>> source open.
>> >         See copyInputStreamToFile(final InputStream source, final File
>> destination, boolean closeSource)
>> >       </action>
>> >
>> > Modified:
>> >     commons/proper/io/trunk/src/changes/changes.xml
>> >
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> >
>> > Modified: commons/proper/io/trunk/src/changes/changes.xml
>> > URL:
>> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1480300&r1=1480299&r2=1480300&view=diff
>> >
>> ==============================================================================
>> > --- commons/proper/io/trunk/src/changes/changes.xml (original)
>> > +++ commons/proper/io/trunk/src/changes/changes.xml Wed May  8 14:36:32
>> 2013
>> > @@ -47,7 +47,11 @@ The <action> type attribute can be add,u
>> >    <body>
>> >      <!-- The release date is the date RC is cut -->
>> >      <release version="2.5" date="2013-??-??" description="New features
>> and bug fixes.">
>> > -      <action issue="IO-380" dev="sebb" type="fix">
>> > +      <action issue="IO-381" dev="ggregory" type="add">
>> > +        Add FileUtils.copyInputStreamToFile API with option to leave
>> the source open.
>> > +        See copyInputStreamToFile(final InputStream source, final File
>> destination, boolean closeSource)
>> > +      </action>
>> > +      <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch">
>> >          FileUtils.copyInputStreamToFile should document it closes the
>> input source
>> >        </action>
>> >        <action issue="IO-279" dev="sebb" type="fix">
>> >
>> > Modified:
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> > URL:
>> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1480300&r1=1480299&r2=1480300&view=diff
>> >
>> ==============================================================================
>> > ---
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> (original)
>> > +++
>> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>> Wed May  8 14:36:32 2013
>> > @@ -1459,8 +1459,7 @@ public class FileUtils {
>> >       * @throws IOException if an IO error occurs during copying
>> >       */
>> >      public static void copyURLToFile(final URL source, final File
>> destination) throws IOException {
>> > -        final InputStream input = source.openStream();
>> > -        copyInputStreamToFile(input, destination);
>> > +        copyInputStreamToFile(source.openStream(), destination);
>>
>> That really belonged in a separate commit.
>>
>> >      }
>> >
>> >      /**
>> > @@ -1488,8 +1487,7 @@ public class FileUtils {
>> >          final URLConnection connection = source.openConnection();
>> >          connection.setConnectTimeout(connectionTimeout);
>> >          connection.setReadTimeout(readTimeout);
>> > -        final InputStream input = connection.getInputStream();
>> > -        copyInputStreamToFile(input, destination);
>> > +        copyInputStreamToFile(connection.getInputStream(), destination);
>>
>> Ditto.
>>
>> >      }
>> >
>> >      /**
>> > @@ -1509,6 +1507,27 @@ public class FileUtils {
>> >       * @since 2.0
>> >       */
>> >      public static void copyInputStreamToFile(final InputStream source,
>> final File destination) throws IOException {
>> > +        copyInputStreamToFile(source, destination, true);
>> > +    }
>> > +
>> > +    /**
>> > +     * 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.
>> > +     *
>> > +     * @param source  the <code>InputStream</code> to copy bytes from,
>> must not be {@code null}, will be closed
>>
>> That's wrong.
>>
>> > +     * @param destination  the non-directory <code>File</code> to write
>> bytes to
>> > +     *  (possibly overwriting), must not be {@code null}
>> > +     * @param closeSource If true, closes the <code>source</code>
>> > +     * @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 copyInputStreamToFile(final InputStream source,
>> final File destination, boolean closeSource)
>> > +            throws IOException {
>>
>> -1
>>
>> I don't like this new method; as explained in  IO-381 there is no
>> reason for anyone to use
>>
>> copyInputStreamToFile(source, destination, true);
>>
>> as that is the same as
>>
>> copyInputStreamToFile(source, destination);
>>
>> >          try {
>> >              final FileOutputStream output =
>> openOutputStream(destination);
>> >              try {
>> > @@ -1518,7 +1537,9 @@ public class FileUtils {
>> >                  IOUtils.closeQuietly(output);
>> >              }
>> >          } finally {
>> > -            IOUtils.closeQuietly(source);
>> > +            if (closeSource) {
>> > +                IOUtils.closeQuietly(source);
>> > +            }
>> >          }
>> >      }
>> >
>> >
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1480300 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/FileUtils.java

Posted by Gary Gregory <ga...@gmail.com>.
Sebb,

Are you suggesting making copyInputStreamToFile(InputStream, File, boolean)
private and adding a public method like copyToFile(InputStream, File) that
calls it with false?

Gary



On Wed, May 8, 2013 at 10:45 AM, sebb <se...@gmail.com> wrote:

> On 8 May 2013 15:36,  <gg...@apache.org> wrote:
> > Author: ggregory
> > Date: Wed May  8 14:36:32 2013
> > New Revision: 1480300
> >
> > URL: http://svn.apache.org/r1480300
> > Log:
> > <action issue="IO-381" dev="ggregory" type="add">
> >         Add FileUtils.copyInputStreamToFile API with option to leave the
> source open.
> >         See copyInputStreamToFile(final InputStream source, final File
> destination, boolean closeSource)
> >       </action>
> >
> > Modified:
> >     commons/proper/io/trunk/src/changes/changes.xml
> >
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> >
> > Modified: commons/proper/io/trunk/src/changes/changes.xml
> > URL:
> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1480300&r1=1480299&r2=1480300&view=diff
> >
> ==============================================================================
> > --- commons/proper/io/trunk/src/changes/changes.xml (original)
> > +++ commons/proper/io/trunk/src/changes/changes.xml Wed May  8 14:36:32
> 2013
> > @@ -47,7 +47,11 @@ The <action> type attribute can be add,u
> >    <body>
> >      <!-- The release date is the date RC is cut -->
> >      <release version="2.5" date="2013-??-??" description="New features
> and bug fixes.">
> > -      <action issue="IO-380" dev="sebb" type="fix">
> > +      <action issue="IO-381" dev="ggregory" type="add">
> > +        Add FileUtils.copyInputStreamToFile API with option to leave
> the source open.
> > +        See copyInputStreamToFile(final InputStream source, final File
> destination, boolean closeSource)
> > +      </action>
> > +      <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch">
> >          FileUtils.copyInputStreamToFile should document it closes the
> input source
> >        </action>
> >        <action issue="IO-279" dev="sebb" type="fix">
> >
> > Modified:
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1480300&r1=1480299&r2=1480300&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> (original)
> > +++
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> Wed May  8 14:36:32 2013
> > @@ -1459,8 +1459,7 @@ public class FileUtils {
> >       * @throws IOException if an IO error occurs during copying
> >       */
> >      public static void copyURLToFile(final URL source, final File
> destination) throws IOException {
> > -        final InputStream input = source.openStream();
> > -        copyInputStreamToFile(input, destination);
> > +        copyInputStreamToFile(source.openStream(), destination);
>
> That really belonged in a separate commit.
>
> >      }
> >
> >      /**
> > @@ -1488,8 +1487,7 @@ public class FileUtils {
> >          final URLConnection connection = source.openConnection();
> >          connection.setConnectTimeout(connectionTimeout);
> >          connection.setReadTimeout(readTimeout);
> > -        final InputStream input = connection.getInputStream();
> > -        copyInputStreamToFile(input, destination);
> > +        copyInputStreamToFile(connection.getInputStream(), destination);
>
> Ditto.
>
> >      }
> >
> >      /**
> > @@ -1509,6 +1507,27 @@ public class FileUtils {
> >       * @since 2.0
> >       */
> >      public static void copyInputStreamToFile(final InputStream source,
> final File destination) throws IOException {
> > +        copyInputStreamToFile(source, destination, true);
> > +    }
> > +
> > +    /**
> > +     * 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.
> > +     *
> > +     * @param source  the <code>InputStream</code> to copy bytes from,
> must not be {@code null}, will be closed
>
> That's wrong.
>
> > +     * @param destination  the non-directory <code>File</code> to write
> bytes to
> > +     *  (possibly overwriting), must not be {@code null}
> > +     * @param closeSource If true, closes the <code>source</code>
> > +     * @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 copyInputStreamToFile(final InputStream source,
> final File destination, boolean closeSource)
> > +            throws IOException {
>
> -1
>
> I don't like this new method; as explained in  IO-381 there is no
> reason for anyone to use
>
> copyInputStreamToFile(source, destination, true);
>
> as that is the same as
>
> copyInputStreamToFile(source, destination);
>
> >          try {
> >              final FileOutputStream output =
> openOutputStream(destination);
> >              try {
> > @@ -1518,7 +1537,9 @@ public class FileUtils {
> >                  IOUtils.closeQuietly(output);
> >              }
> >          } finally {
> > -            IOUtils.closeQuietly(source);
> > +            if (closeSource) {
> > +                IOUtils.closeQuietly(source);
> > +            }
> >          }
> >      }
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Re: svn commit: r1480300 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/FileUtils.java

Posted by sebb <se...@gmail.com>.
On 8 May 2013 15:36,  <gg...@apache.org> wrote:
> Author: ggregory
> Date: Wed May  8 14:36:32 2013
> New Revision: 1480300
>
> URL: http://svn.apache.org/r1480300
> Log:
> <action issue="IO-381" dev="ggregory" type="add">
>         Add FileUtils.copyInputStreamToFile API with option to leave the source open.
>         See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
>       </action>
>
> Modified:
>     commons/proper/io/trunk/src/changes/changes.xml
>     commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>
> Modified: commons/proper/io/trunk/src/changes/changes.xml
> URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1480300&r1=1480299&r2=1480300&view=diff
> ==============================================================================
> --- commons/proper/io/trunk/src/changes/changes.xml (original)
> +++ commons/proper/io/trunk/src/changes/changes.xml Wed May  8 14:36:32 2013
> @@ -47,7 +47,11 @@ The <action> type attribute can be add,u
>    <body>
>      <!-- The release date is the date RC is cut -->
>      <release version="2.5" date="2013-??-??" description="New features and bug fixes.">
> -      <action issue="IO-380" dev="sebb" type="fix">
> +      <action issue="IO-381" dev="ggregory" type="add">
> +        Add FileUtils.copyInputStreamToFile API with option to leave the source open.
> +        See copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
> +      </action>
> +      <action issue="IO-380" dev="sebb" type="fix" due-to="claudio_ch">
>          FileUtils.copyInputStreamToFile should document it closes the input source
>        </action>
>        <action issue="IO-279" dev="sebb" type="fix">
>
> Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1480300&r1=1480299&r2=1480300&view=diff
> ==============================================================================
> --- commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java (original)
> +++ commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java Wed May  8 14:36:32 2013
> @@ -1459,8 +1459,7 @@ public class FileUtils {
>       * @throws IOException if an IO error occurs during copying
>       */
>      public static void copyURLToFile(final URL source, final File destination) throws IOException {
> -        final InputStream input = source.openStream();
> -        copyInputStreamToFile(input, destination);
> +        copyInputStreamToFile(source.openStream(), destination);

That really belonged in a separate commit.

>      }
>
>      /**
> @@ -1488,8 +1487,7 @@ public class FileUtils {
>          final URLConnection connection = source.openConnection();
>          connection.setConnectTimeout(connectionTimeout);
>          connection.setReadTimeout(readTimeout);
> -        final InputStream input = connection.getInputStream();
> -        copyInputStreamToFile(input, destination);
> +        copyInputStreamToFile(connection.getInputStream(), destination);

Ditto.

>      }
>
>      /**
> @@ -1509,6 +1507,27 @@ public class FileUtils {
>       * @since 2.0
>       */
>      public static void copyInputStreamToFile(final InputStream source, final File destination) throws IOException {
> +        copyInputStreamToFile(source, destination, true);
> +    }
> +
> +    /**
> +     * 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.
> +     *
> +     * @param source  the <code>InputStream</code> to copy bytes from, must not be {@code null}, will be closed

That's wrong.

> +     * @param destination  the non-directory <code>File</code> to write bytes to
> +     *  (possibly overwriting), must not be {@code null}
> +     * @param closeSource If true, closes the <code>source</code>
> +     * @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 copyInputStreamToFile(final InputStream source, final File destination, boolean closeSource)
> +            throws IOException {

-1

I don't like this new method; as explained in  IO-381 there is no
reason for anyone to use

copyInputStreamToFile(source, destination, true);

as that is the same as

copyInputStreamToFile(source, destination);

>          try {
>              final FileOutputStream output = openOutputStream(destination);
>              try {
> @@ -1518,7 +1537,9 @@ public class FileUtils {
>                  IOUtils.closeQuietly(output);
>              }
>          } finally {
> -            IOUtils.closeQuietly(source);
> +            if (closeSource) {
> +                IOUtils.closeQuietly(source);
> +            }
>          }
>      }
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org