Author: ggregory
Date: Tue Aug 30 17:22:38 2011
New Revision: 1163295

URL: http://svn.apache.org/viewvc?rev=1163295&view=rev
Log:
[IO-282] Add API FileUtils.copyFile(File input, OutputStream output)

Modified:
    commons/proper/io/trunk/src/changes/changes.xml
    commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
    
commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.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=1163295&r1=1163294&r2=1163295&view=diff
==============================================================================
--- commons/proper/io/trunk/src/changes/changes.xml (original)
+++ commons/proper/io/trunk/src/changes/changes.xml Tue Aug 30 17:22:38 2011
@@ -43,6 +43,9 @@ The <action> type attribute can be add,u
       <action dev="sebb" type="fix" issue="IO-280" due-to="sebb">
         Dubious use of mkdirs() return code
       </action>
+      <action dev="ggregory" type="add" issue="IO-282" due-to="ggregory">
+        Add API FileUtils.copyFile(File input, OutputStream output)
+      </action>
 
 <!-- TODO check where these fixes really belong -->
       <action dev="sebb" type="fix" issue="IO-274" due-to="Frank Grimes">

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=1163295&r1=1163294&r2=1163295&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 
Tue Aug 30 17:22:38 2011
@@ -889,6 +889,32 @@ public class FileUtils {
     }
 
     /**
+     * Copy bytes from a <code>File</code> to an <code>OutputStream</code>.
+     * <p>
+     * This method buffers the input internally, so there is no need to use a 
<code>BufferedInputStream</code>.
+     * </p>
+     * 
+     * @param input
+     *            the <code>File</code> to read from
+     * @param output
+     *            the <code>OutputStream</code> to write to
+     * @return the number of bytes copied
+     * @throws NullPointerException
+     *             if the input or output is null
+     * @throws IOException
+     *             if an I/O error occurs
+     * @since Commons IO 2.1
+     */
+    public static long copyFile(File input, OutputStream output) throws 
IOException {
+        final FileInputStream fis = new FileInputStream(input);
+        try {
+            return IOUtils.copyLarge(fis, output);
+        } finally {
+            fis.close();
+        }
+    }
+    
+    /**
      * Internal copy file method.
      * 
      * @param srcFile  the validated source file, must not be <code>null</code>

Modified: 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java
URL: 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java?rev=1163295&r1=1163294&r2=1163295&view=diff
==============================================================================
--- 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java
 (original)
+++ 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java
 Tue Aug 30 17:22:38 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.io;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -38,6 +39,7 @@ import java.util.zip.Checksum;
 import org.apache.commons.io.filefilter.NameFileFilter;
 import org.apache.commons.io.filefilter.WildcardFileFilter;
 import org.apache.commons.io.testtools.FileBasedTestCase;
+import org.junit.Assert;
 
 /**
  * This is used to test FileUtils for correctness.
@@ -836,6 +838,14 @@ public class FileUtilsTestCase extends F
             testFile1.lastModified() == destination.lastModified());*/  
     }
 
+    public void testCopyFileToOutputStream() throws Exception {
+        ByteArrayOutputStream destination = new ByteArrayOutputStream();
+        FileUtils.copyFile(testFile1, destination);
+        assertEquals("Check Full copy size", testFile1Size, 
destination.size());
+        byte[] expected = FileUtils.readFileToByteArray(testFile1);
+        Assert.assertArrayEquals("Check Full copy", expected, 
destination.toByteArray());
+    }
+
     public void IGNOREtestCopyFileLarge() throws Exception {
 
         File largeFile = new File(getTestDirectory(), "large.txt");


Reply via email to