千家信息网

java中文件复制的方式有哪些

发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,这篇文章主要介绍了java中文件复制的方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java中文件复制的4种方式1. 使用F
千家信息网最后更新 2024年11月29日java中文件复制的方式有哪些

这篇文章主要介绍了java中文件复制的方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

java中文件复制的4种方式

1. 使用FileStreams复制

比较经典的一个代码,使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。

public static void copy(String source, String dest, int bufferSize) {    InputStream in = null;    OutputStream out = null;    try {        in = new FileInputStream(new File(source));        out = new FileOutputStream(new File(dest));        byte[] buffer = new byte[bufferSize];        int len;        while ((len = in.read(buffer)) > 0) {            out.write(buffer, 0, len);        }    } catch (Exception e) {        Log.w(TAG + ":copy", "error occur while copy", e);    } finally {        safelyClose(TAG + ":copy", in);        safelyClose(TAG + ":copy", out);    }}   2.

2、使用FileChannel

Java NIO包括transferFrom方法,根据文档应该比文件流复制的速度更快。

public static void copyNio(String source, String dest) {    FileChannel input = null;    FileChannel output = null;    try {        input = new FileInputStream(new File(from)).getChannel();        output = new FileOutputStream(new File(to)).getChannel();        output.transferFrom(input, 0, input.size());    } catch (Exception e) {        Log.w(TAG + "copyNio", "error occur while copy", e);    } finally {        safelyClose(TAG + "copyNio", input);        safelyClose(TAG + "copyNio", output);    }}3、 使用Apache Commons IO复制Appache Commons IO 提供了一个FileUtils.copyFile(File from, File to)方法用于文件复制,如果项目里使用到了这个类库,使用这个方法是个不错的选择。它的内部也是使用Java NIO的FileChannel实现的。commons-io的路径:http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html。里面还有很多实用的方法,如拷贝目录、拷贝指定格式文件等。
private static void  copyFileByApacheCommonsIO(File source, File dest) throws IOException {    FileUtils.copyFile(source, dest);}

4、使用Java7的Files类复制

private static void copyFileUsingJava7Files(File source, File dest) throws IOException {    Files.copy(source.toPath(), dest.toPath());}

我没有亲测,找了下网友的测试程序和输出,性能数据供大家参考

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.channels.FileChannel;import java.nio.file.Files;import org.apache.commons.io.FileUtils;public class CopyFilesExample {   public static void main(String[] args) throws InterruptedException,      IOException {    File source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile1.txt");    File dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile1.txt");    // copy file using FileStreams    long start = System.nanoTime();    long end;    copyFileUsingFileStreams(source, dest);    System.out.println("Time taken by FileStreams Copy = "        + (System.nanoTime() - start));       // copy files using java.nio.FileChannel    source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile2.txt");    dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile2.txt");    start = System.nanoTime();    copyFileUsingFileChannels(source, dest);    end = System.nanoTime();    System.out.println("Time taken by FileChannels Copy = " + (end - start));     // copy file using Java 7 Files class    source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile3.txt");    dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile3.txt");    start = System.nanoTime();    copyFileUsingJava7Files(source, dest);    end = System.nanoTime();    System.out.println("Time taken by Java7 Files Copy = " + (end - start));    // copy files using apache commons io    source = new File("C:\\Users\\nikos7\\Desktop\\files\\sourcefile4.txt");    dest = new File("C:\\Users\\nikos7\\Desktop\\files\\destfile4.txt");    start = System.nanoTime();    copyFileUsingApacheCommonsIO(source, dest);    end = System.nanoTime();    System.out.println("Time taken by Apache Commons IO Copy = "        + (end - start));   }  private static void copyFileUsingFileStreams(File source, File dest)      throws IOException {    InputStream input = null;    OutputStream output = null;    try {      input = new FileInputStream(source);      output = new FileOutputStream(dest);      byte[] buf = new byte[1024];      int bytesRead;      while ((bytesRead = input.read(buf)) > 0) {        output.write(buf, 0, bytesRead);      }    } finally {      input.close();      output.close();    }  }  private static void copyFileUsingFileChannels(File source, File dest)      throws IOException {    FileChannel inputChannel = null;    FileChannel outputChannel = null;    try {      inputChannel = new FileInputStream(source).getChannel();      outputChannel = new FileOutputStream(dest).getChannel();      outputChannel.transferFrom(inputChannel, 0, inputChannel.size());    } finally {      inputChannel.close();      outputChannel.close();    }  }  private static void copyFileUsingJava7Files(File source, File dest)      throws IOException {    Files.copy(source.toPath(), dest.toPath());  }  private static void copyFileUsingApacheCommonsIO(File source, File dest)      throws IOException {    FileUtils.copyFile(source, dest);  } }

输出:

Time taken by FileStreams Copy = 127572360

Time taken by FileChannels Copy = 10449963

Time taken by Java7 Files Copy = 10808333

Time taken by Apache Commons IO Copy = 17971677

感谢你能够认真阅读完这篇文章,希望小编分享的"java中文件复制的方式有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0