Java文件拷贝的几种实现方案

dsrfewrqre 8年前
   <p>在jdk1.7之前,java中没有直接的类提供文件复制功能。下面就文件复制,提出几种方案。</p>    <h2>jdk1.7中的文件复制</h2>    <p>在jdk1.7版本中可以直接使用Files.copy(File srcFile, File destFile)方法即可。</p>    <pre>  <code class="language-java">private static void copyFileUsingJava7Files(File source, File dest)          throws IOException {              Files.copy(source.toPath(), dest.toPath());  }</code></pre>    <h2>使用FileInputStream复制</h2>    <pre>  <code class="language-java">/**   *   * @Title: copyFileUsingStream   * @Description: 使用Stream拷贝文件   * @param: @param source   * @param: @param dest   * @param: @throws IOException   * @return: void   * @throws   */  public static void copyFileUsingStream(File source, File dest)  throws IOException {      InputStream is = null;      OutputStream os = null;      try {          is = new FileInputStream(source);          os = new FileOutputStream(dest);          byte[] buffer = new byte[1024];          int length;          while ((length = is.read(buffer)) > 0) {              os.write(buffer, 0, length);          }      } finally {          is.close();          os.close();      }  }</code></pre>    <h2>使用FileChannel实现复制</h2>    <pre>  <code class="language-java">/**   * @throws IOException   *   * @Title: copyFileUsingChannel   * @Description: 使用Channel拷贝文件   * @param: @param source   * @param: @param dest   * @return: void   * @throws   */  public static void copyFileUsingChannel(File source, File dest) throws IOException {      FileChannel sourceChannel = null;      FileChannel destChannel = null;      try {          sourceChannel = new FileInputStream(source).getChannel();          destChannel = new FileOutputStream(dest).getChannel();          destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());      } finally {          sourceChannel.close();          destChannel.close();      }  }</code></pre>    <h2>使用Apache Commons IO包中的FileUtils.copyFile复制</h2>    <pre>  <code class="language-java">public static void copyFileUsingApacheIO(File source, File dest) throws IOException {          FileUtils.copyFile(source, dest);      }</code></pre>    <h2>使用IO重定向实现复制</h2>    <pre>  <code class="language-java">/**   *   * @Title: copyFileUsingRedirection   * @Description: 使用Redirection拷贝文件   * @param: @param source   * @param: @param dest   * @param: @throws IOException   * @return: void   * @throws   */  public static void copyFileUsingRedirection(File source, File dest) throws IOException {      FileInputStream in = null;      PrintStream out = null;      try {          in = new FileInputStream(source);          out = new PrintStream(dest);          System.setIn(in);          System.setOut(out);          Scanner sc = new Scanner(System.in);          while(sc.hasNext()) {              System.out.println(sc.nextLine());          }      } finally{          in.close();          out.close();      }  }</code></pre>    <p> </p>    <p>来自:http://www.jianshu.com/p/56843fdc2986</p>    <p> </p>