1.Java 复制文件 - 流

这是java中文件复制的常规方式。在这里,我们创建两个文件 - 源和目标。然后我们从源创建InputStream并使用OutputStream将其写入目标文件进行 java 复制文件操作。这是可用于使用流的java复制文件的方法。

private 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();}
}

2.Java 复制文件 - java.nio.channels.FileChannel

Java NIO 类是在 Java 1.4 中引入的,FileChannel 可用于在 java 中复制文件。根据transferFrom()方法 javadoc,这种复制文件的方式应该比使用 Streams 复制文件更快。这是可用于使用 FileChannel 复制文件的方法。

private 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();}
}

3.Java 复制文件 - Apache Commons IO FileUtils

Apache Commons IO FileUtils。copyFile(File srcFile, File destFile)可用于在 java 中复制文件。如果您已经在项目中使用 Apache Commons IO,那么使用它来简化代码是有意义的。它在内部使用 Java NIO FileChannel,因此如果您尚未将其用于其他功能,则可以避免使用此包装器方法。下面是使用apache commons io进行java复制文件操作的方法。

private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {FileUtils.copyFile(source, dest);
}

4.Java 复制文件 - 文件类

如果您正在使用 Java 7 或更高版本,则可以使用Files类的copy()方法在 java 中复制文件。它使用文件系统提供程序来复制文件。

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

现在为了找出最快的方法,编写了一个测试类,并为 1 GB 的复制文件逐个执行上述方法。在每次调用中,使用不同的文件来避免由于缓存而对后面的方法产生任何好处。

package com.journaldev.files;
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 JavaCopyFile {public static void main(String[] args) throws InterruptedException, IOException {File source = new File("/Users/pankaj/tmp/source.avi");File dest = new File("/Users/pankaj/tmp/dest.avi");//copy file conventional way using Streamlong start = System.nanoTime();copyFileUsingStream(source, dest);System.out.println("Time taken by Stream Copy = "+(System.nanoTime()-start));        //copy files using java.nio FileChannelsource = new File("/Users/pankaj/tmp/sourceChannel.avi");dest = new File("/Users/pankaj/tmp/destChannel.avi");start = System.nanoTime();copyFileUsingChannel(source, dest);System.out.println("Time taken by Channel Copy = "+(System.nanoTime()-start));        //copy files using apache commons iosource = new File("/Users/pankaj/tmp/sourceApache.avi");dest = new File("/Users/pankaj/tmp/destApache.avi");start = System.nanoTime();copyFileUsingApacheCommonsIO(source, dest);System.out.println("Time taken by Apache Commons IO Copy = "+(System.nanoTime()-start));        //using Java 7 Files classsource = new File("/Users/pankaj/tmp/sourceJava7.avi");dest = new File("/Users/pankaj/tmp/destJava7.avi");start = System.nanoTime();copyFileUsingJava7Files(source, dest);System.out.println("Time taken by Java7 Files Copy = "+(System.nanoTime()-start));        }
}

这是上面程序的输出,注意注释了上面的代码,以确保每次只使用一种方法进行 java 文件复制操作。

Time taken by Stream Copy = 44582575000
Time taken by Channel Copy = 104138195000
Time taken by Apache Commons IO Copy = 108396714000
Time taken by Java7 Files Copy = 89061578000

从输出中可以清楚地看出,Stream Copy 是在 Java 中复制 File 的最佳方式。

4种Java文件复制的方法相关推荐

  1. copy所有的java文件到硬盘_将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad...

    listFiles方法接受一个FileFilter对象,这个FileFilter对象就是过虑的策略对象,不同的人提供不同的FileFilter实现,即提供了不同的过滤策略. //将d:\java目录下 ...

  2. 将d:\java目录下的所有.java文件复制到d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad

    package com;import java.io.*; import java.util.ArrayList; import java.util.List; /* 编写一个程序,将d:\java目 ...

  3. 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad

    package com.hbut.test; import java.io.File; import java.io.FileNotFoundException; import java.io.Fil ...

  4. 把java复制到e_编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下...

    package cn.io.file.demo; import java.io.BufferedReader; import java.io.BufferedWriter; import java.i ...

  5. Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg...

    package com.swift;import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; im ...

  6. Eclipse不编译java文件的解决方法

    Eclipse不编译java文件的解决方法 A:1.在preference-Java-complier-builing中的选项从默认的error改成warning就可以成功访问 2.点击"P ...

  7. 4种回收站文件恢复的方法

    回收站是操作系统提供的一个十分实用的功能,为用户暂时存放从台式/笔记本电脑硬盘删除的文件,因而很多小伙伴都少不了使用回收站,那么如果想要恢复回收站中的文件怎么办呢?恢复回收站文件的方法有哪些?这里总结 ...

  8. JAVA文件复制和文件加密存储

    前言 提示:本篇文章主要讲解一下Java如何复制文件,以及Java如何加密文件 1.文件复制 直接给出实例代码 代码如下(示例): package file;import java.io.*;publ ...

  9. s80智慧物联网系统怎么连接服务器,一种GPRS文件远程传输方法、物联网终端及系统...

    1.一种GPRS文件远程传输方法,其特征在于,包括: 物联网终端控制其GSM无线模块建立与GPRS移动网关的PPP连接,以使得物联网终端在建立起与网络侧的网管控制服务器之间的无线通信链路之时,GSM无 ...

最新文章

  1. 【HDOJ 3652】B-number
  2. git status清空_Git常见命令和遇到问题的解决办法
  3. win10更名导致MySQL无法启动服务
  4. python源码多平台编译_提升Python程序运行效率的6个方法
  5. DataSet读写xml文件
  6. 随想录(octave软件)
  7. iOS应用商店审核指南
  8. vax与vay的区别
  9. 康佳电视应用助手服务器连接超时,康佳盒子出现网络连接问题的原因,解决方式...
  10. windowns下VS缺少头文件“unistd.h“的解决方案
  11. JAVA毕业设计江西婺源旅游文化推广系统计算机源码+lw文档+系统+调试部署+数据库
  12. 用HTML实现旋转地球,使用CSS3和贴图实现的旋转的蓝色地球
  13. 2019软件工程第三次作业
  14. python|简单实现英文单词大小写转化
  15. 一文读懂:本地数据湖丨数据仓库丨云数据湖的利与弊
  16. 原生JS实现富文本编辑器
  17. 数据表与简单Java类映射转换
  18. Python Appium移动端app自动化测试框架
  19. 【常见直流电机驱动模块与arduino使用最全教程】
  20. 通往更便宜的义肢之路——关于义肢的综述

热门文章

  1. 达人评测 r7 7735h和r7 5800h选哪个 锐龙r77735h和5800h对比
  2. 虚拟机可以多开一台服务器吗,游戏多开必备:虚拟机vmware安装
  3. Java练手项目3:基于Java的经典扫雷游戏(入门必备)!
  4. Java--入门指引
  5. 3C认证---强制性产品认证制度
  6. installshield express for delphi7
  7. AutoCAD2012从入门到精通中文视频教程 第6课 极坐标(个人收藏)
  8. 【RTX51 Tiny入门】01_RTX51 Full Tiny简介
  9. IDEA下载与安装,保姆级教程
  10. java堆栈、gc、dump文件在线分析