java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...

尽管Java提供了一个可以处理文件的IO操作类。 但是没有一个复制文件的方法。 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候。 然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式。

1. 使用FileStreams复制

这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。 这是第一个方法的代码:

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

}

}

正如你所看到的我们执行几个读和写操作try的数据,所以这应该是一个低效率的,下一个方法我们将看到新的方式。

2. 使用FileChannel复制

Java NIO包括transferFrom方法,根据文档应该比文件流复制的速度更快。 这是第二种方法的代码:

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

}

}

3. 使用Commons IO复制

Apache Commons IO提供拷贝文件方法在其FileUtils类,可用于复制一个文件到另一个地方。它非常方便使用Apache Commons FileUtils类时,您已经使用您的项目。基本上,这个类使用Java NIO FileChannel内部。 这是第三种方法的代码:

private static void copyFileUsingApacheCommonsIO(File source, File dest)

throws IOException {

FileUtils.copyFile(source, dest);

}

4. 使用Java7的Files类复制

如果你有一些经验在Java 7中你可能会知道,可以使用复制方法的Files类文件,从一个文件复制到另一个文件。 这是第四个方法的代码:

private static void copyFileUsingJava7Files(File source, File dest)

throws IOException {

Files.copy(source.toPath(), dest.toPath());

}

下面看下java拷贝文件到另一个目录下的实现代码,具体代码如下所示:

package com.util;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

public class TestHtml {

/**

* 复制单个文件

* @param oldPath String 原文件路径 如:c:/fqf.txt

* @param newPath String 复制后路径 如:f:/fqf.txt

* @return boolean

*/

public void copyFile(String oldPath, String newPath) {

try {

int bytesum = 0;

int byteread = 0;

File oldfile = new File(oldPath);

if (oldfile.exists()) { //文件存在时

InputStream inStream = new FileInputStream(oldPath); //读入原文件

FileOutputStream fs = new FileOutputStream(newPath);

byte[] buffer = new byte[1444];

int length;

while ( (byteread = inStream.read(buffer)) != -1) {

bytesum += byteread; //字节数 文件大小

System.out.println(bytesum);

fs.write(buffer, 0, byteread);

}

inStream.close();

}

}

catch (Exception e) {

System.out.println("复制单个文件操作出错");

e.printStackTrace();

}

}

/**

* 复制整个文件夹内容

* @param oldPath String 原文件路径 如:c:/fqf

* @param newPath String 复制后路径 如:f:/fqf/ff

* @return boolean

*/

public void copyFolder(String oldPath, String newPath) {

try {

(new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹

File a=new File(oldPath);

String[] file=a.list();

File temp=null;

for (int i = 0; i < file.length; i++) {

if(oldPath.endsWith(File.separator)){

temp=new File(oldPath+file[i]);

}

else{

temp=new File(oldPath+File.separator+file[i]);

}

if(temp.isFile()){

FileInputStream input = new FileInputStream(temp);

FileOutputStream output = new FileOutputStream(newPath + "/" +

(temp.getName()).toString());

byte[] b = new byte[1024 * 5];

int len;

while ( (len = input.read(b)) != -1) {

output.write(b, 0, len);

}

output.flush();

output.close();

input.close();

}

if(temp.isDirectory()){//如果是子文件夹

copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);

}

}

}

catch (Exception e) {

System.out.println("复制整个文件夹内容操作出错");

e.printStackTrace();

}

}

public static void main(String[] args)throws Exception {

// //这是你的源文件,本身是存在的

// File beforefile = new File("C:/Users/Administrator/Desktop/Untitled-2.html");

//

// //这是你要保存之后的文件,是自定义的,本身不存在

// File afterfile = new File("C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html");

//

// //定义文件输入流,用来读取beforefile文件

// FileInputStream fis = new FileInputStream(beforefile);

//

// //定义文件输出流,用来把信息写入afterfile文件中

// FileOutputStream fos = new FileOutputStream(afterfile);

//

// //文件缓存区

// byte[] b = new byte[1024];

// //将文件流信息读取文件缓存区,如果读取结果不为-1就代表文件没有读取完毕,反之已经读取完毕

// while(fis.read(b)!=-1){

// //将缓存区中的内容写到afterfile文件中

// fos.write(b);

// fos.flush();

// }

String oldPath="C:/Users/Administrator/Desktop/Untitled-2.html";

String newPath="C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html";

TestHtml t=new TestHtml();

t.copyFile(oldPath, newPath);

}

}

总结

以上所述是小编给大家介绍的java复制文件的4种方式及拷贝文件到另一个目录下的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BCVP开发者说第一期:Destiny.Core.Flow

沉静岁月&#xff0c;淡忘流年1项目简介Destiny.Core.FlowDestiny.Core.Flow是基于.NetCore平台&#xff0c;轻量级的模块化开发框架&#xff0c;Admin管理应用框架&#xff0c;旨在提升团队的快速开发输出能力&#xff0c;由常用公共操作类&#xff08;工具类、帮助类&#xf…

.NET Core 取消令牌:CancellationToken

在 .NET 开发中&#xff0c;CancellationToken&#xff08;取消令牌&#xff09;是一项比较重要的功能&#xff0c;掌握并合理的使用 CancellationToken 可以提升服务的性能。特别在异步编程中&#xff0c;我常常会以创建 Task 的方式利用多线程执行一些耗时或非核心业务逻辑&a…

java char short区别_java 彻底理解 byte char short int float long double

遇到过很多关于 数值类型范围的问题了&#xff0c;在这做一个总结&#xff0c;我们可以从多方面理解不同数值类型的所能表示的数值范围在这里我们只谈论 java中的数值类型首先说byte&#xff1a;这段是摘自jdk中 Byte.java中的源代码从这里可以看出 byte的取值范围&#xff1a;…

程序员过关斩将--从未停止过的系统架构设计步伐

“首先&#xff0c;这篇文章肯定会得罪一些人“其次&#xff0c;此文只代表我个人的意见&#xff0c;仅供参考从分层说起谈到系统架构的分层和系统领域边界的划分&#xff0c;每个架构师&#xff0c;每个技术经理&#xff0c;甚至每个程序员都有自己的一套想法。无论是怎么样的…

java流上传文档把磁盘撑满_BOOT目录磁盘占用满处理

背景&#xff1a;Ubuntu:16.04查看已安装启动镜像dpkg --get-selections |grep linux-image这里会列出目前已经安装的启动镜像&#xff0c;一般分两种&#xff0c;一种状态为“install”&#xff0c;一种为“deinstall”对于"deinstall"的镜像&#xff0c;一般为镜像…

C# 9.0 正式发布了(C# 9.0 on the record)

翻译自 Mads Torgersen 2020年11月10日的博文《C# 9.0 on the record》 [1]&#xff0c;Mads Torgersen 是微软 C# 语言的首席设计师&#xff0c;也是微软 .NET 团队的项目群经理。C# 9.0 正式发布正式宣布&#xff1a;C# 9.0 发布了&#xff01;早在5月&#xff0c;我就写了一…

磁带最优存储问题java实现_磁带的最优存储问题(贪心选择)

算法设计n个程序的平均读取时间&#xff1a;(贪心策略)在该题目中&#xff0c;要考虑综合因素&#xff1a;长度和读取概率。要求n个程序的平均读取时间最短。按照贪心策略&#xff0c;则每个程序的读取时间都应该最短。故&#xff1a;(1)计算每个程序的长度和读取概率的乘积。(…

BCVP第2期:项目已完成升级.NET5.0

(是时候拿出来这种图了)1开心的锣鼓想必这两天最热闹的几个词语&#xff0c;就是c#9.0、.net5.0还有conf大会了吧&#xff0c;当然还有大一统。其实&#xff0c;早在2019年年中&#xff0c;就已经引入了.NET5.0了&#xff0c;然后从2020-03-16开始&#xff0c;就一直在说.NET5.…

java 1..0 openjdk_java-1.7.0-openjdk-i386和java-7-openjdk-i386有什么区别

两个OpenJDK是一样的.但是OpenJDK与Oracle JDK略有不同.阅读this post了解更多信息.您为OpenJDK获取两个选项的原因是PROBABLY,您有两个安装的OpenJDK副本(或两个不同的引用到系统上的同一目录).为了进一步调查,请尝试使用ls -lh /usr/lib / jvm. /usr/lib / jvm通常是Java安装…

linux java升级版本_为嵌入式Linux设备实现更新/升级系统

我有一个在嵌入式Linux设备上运行的应用程序&#xff0c;并且偶尔会对软件进行更改&#xff0c;有时也会对根文件系统甚至已安装的内核进行更改 .在当前的更新系统中&#xff0c;只删除旧应用程序目录的内容&#xff0c;并在其上复制新文件 . 当对根文件系统进行更改时&#xf…

如何在ASP.NetCore增加文件上传大小

关注架构师高级俱乐部开启架构之路不定期福利发放哦~架构师高级俱乐部读完需要7分钟速读仅需 3 分钟/ 如何在核心中增加文件 ASP.NET 大小 /从ASP.NET 2.0开始最大请求正文大小限制为30MB &#xff08;28.6 MiB&#xff09;。在正常情况下&#xff0c;无需增加 HTTP 请求 body …

java完全二叉树最小堆_Java实现最小堆一

Java实现最小堆一堆是一种经过排序的完全二叉树&#xff0c;其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。最大堆和最小堆是二叉堆的两种形式。最大堆&#xff1a;根结点的键值是所有堆结点键值中最大者。最小堆&#xff1a;根结点的键值是所有堆结…

一个 Task 不够,又来一个 ValueTask ,真的学懵了!

一&#xff1a;背景 1. 讲故事前几天在项目中用 MemoryStream 的时候意外发现 ReadAsync 方法多了一个返回 ValueTask 的重载&#xff0c;真是日了狗了&#xff0c;一个 Task 已经够学了&#xff0c;又来一个 ValueTask&#xff0c;晕&#xff0c;方法签名如下&#xff1a;publ…

java class类型参数_使用Class对象实例化Java类型参数/ generic

如何实例化Java泛型对象,该对象仅接受类或参数给出的类型参数宾语&#xff1f;例如&#xff1a;通常,可以使用以下语法实例化Integer对象的ArrayList&#xff1a;ArrayList foo new ArrayList();但是,给定一个Class诸如Integer.class之类的对象,怎么能创建一个类似的ArrayList…

Magicodes.IE 3.0重磅设计畅谈

Magicodes.IE 3.0重磅设计畅谈总体设计图Magicodes.IE导入导出通用库&#xff0c;支持Dto导入导出、模板导出、花式导出以及动态导出&#xff0c;支持Excel、Csv、Word、Pdf和Html。IE在去年年底重构一次之后&#xff0c;经过这么长时间的迭代&#xff0c;又迎来了瓶颈。根据本…

php引用类,thinkphp引用类的使用

比如发送邮件类phpmailer1.将核心文件放入ORG目录下2.在使用的地方&#xff0c;引入这个类文件如何引入呢&#xff1f;import(.ORG.phpmailer);这个表示引入当前项目中的ORG中的phpmailer.class.php文件3.引入之后就可以使用文件中的类了public function sendEmail() {import(.…

Net5 已经来临,让我来送你一个成功

没错&#xff0c;那就是“下载成功”。现在&#xff0c;已经可以急速下载.Net5 docker 镜像 .Net 5 进行今天已经正式发布&#xff0c;想必各位已经通过各种渠道了解到了此次发布的所有内容。并且也都体会到了这次凑成三连的金 scott 是什么效果&#xff08;啊哈&#xff0c;三…

list申请java,java把一个list中的内容添加到另一个list中 FPGA编程问题:有多个.v文件与module,把他们加到......

导航&#xff1a;网站首页 >java把一个list中的内容添加到另一个list中 FPGA编程问题&#xff1a;有多个.v文件与module&#xff0c;把他们加到...java把一个list中的内容添加到另一个list中 FPGA编程问题&#xff1a;有多个.v文件与module&#xff0c;把他们加到...相关问题…

推荐几款强大流行的BI系统

高级架构师俱乐部 读完需要2分钟速读仅需 1 分钟企业在日常运营过程中&#xff0c;需要根据公司实时经营数据来做未来决测或者发现经营中的问题&#xff0c;在此过程中离不开对数据的分析&#xff0c;而平常利用 excel 等方式极大的提高了领导层快速做出决测的成本&#xff0c…

php 4位数字不足补零,php实现数字不足补0的方法

php实现数字不足补0的方法发布时间&#xff1a;2020-08-28 09:51:06来源&#xff1a;亿速云阅读&#xff1a;100作者&#xff1a;小新这篇文章将为大家详细讲解有关php实现数字不足补0的方法&#xff0c;小编觉得挺实用的&#xff0c;因此分享给大家做个参考&#xff0c;希望大…