java中文件复制的方式有哪些
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍了java中文件复制的方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java中文件复制的4种方式1. 使用F
千家信息网最后更新 2025年01月24日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安全错误
数据库的锁怎样保障安全
服务器修改后excel怎么保存
最新的计算机网络技术话题
东乡公安局网络安全
游戏服务器进度怎么查
尼瑞克戒烟贴软件开发
浙江曙光服务器维修调试云服务器
服务器网盘
学金融用什么软件开发
mimic数据库病种
最新病毒攻击网络安全的案例
数据库2008wmi失败
断面绘制程序数据库文件
有关网络安全教育的电影
服务器防关联
网络安全招聘考试
万全服务器 管理口
电脑网络安全宣传报道
数据库表能不能创建主索引
使用adt连接数据库
微加互联网科技
服务器运行cp命令时断
网络安全的安全教育
网络安全审计职责
php数据库的分析与设计
车祸视频软件开发
应用软件开发需要资质么
腾讯云轻量型服务器怎么架设网站
网络安全法全文打印
铜梁区一站式软件开发流程公司
计算机网络技术基础第2版电子书