java中文件复制的方式有哪些
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要介绍了java中文件复制的方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java中文件复制的4种方式1. 使用F
千家信息网最后更新 2025年11月14日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中文件复制的方式有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
文件
方法
篇文章
方式
拷贝
参考
输出
不错
实用
代码
价值
兴趣
同时
字节
性能
数据
文档
更多
更快
朋友
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
成都系统软件开发哪家正规
罗铺服务器
服务器可以组装两个电脑么
东莞智能软件开发公司
ibm服务器设置密码
办公网络安全培训课件
杭州蟹蟹网络技术有限公司
青岛平台软件开发推荐
中国教育统计年鉴数据库
服务器企业管理器怎么打开
网络技术见解
gis如何添加数据库进来
数据库怎样使用索引来查找
图拉丁康柏服务器
行为管理服务器为什么有网线
强化员工网络安全意识
苹果无链接服务器
畅联网络安全
如何切换服务器
重庆市网络安全培训班
硬件服务器选型
我了解的网络安全手抄报
药理学笔记软件开发
网络安全岗位评价
信息管理系统无法与服务器连接
网络安全运维工程师面试
衡水app软件开发团队
软件开发的标签是什么
吉安正规服务器要多少费用
招商银行北京软件开发