尽管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种方式及拷贝文件到另一个目录下的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

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

  1. java复制文件的4种方式及拷贝文件到另一个目录下与删除单个文件和删除整个文件夹

    文章目录 1.使用FileStreams复制 2.使用FileChannel复制 3.使用Commons IO复制 4.使用Java7的Files类复制 5.下面看下java拷贝文件到另一个目录下的实 ...

  2. java加载配置文件_Java 读取配置文件的五种方式

    方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来. 因为是用ServletContext读取文件路径,所以配置文件可以放入在WEB-INF的clas ...

  3. java map 迭代遍历_java 遍历Map的四种方式

    java 遍历Map的四种方式 CreationTime--2018年7月16日16点15分 Author:Marydon 一.迭代key&value 第一种方式:迭代entrySet 1.方 ...

  4. java实现多线程抢单_JAVA实现多线程的四种方式

    JAVA多线程实现方式: 1.继承Thread类(无返回值) 2.实现Runnable接口(无返回值) 3.实现Callable接口,通过FutureTask包装器来创建Threak线程(有返回值) ...

  5. java如何遍历树_java 遍历树的四种方式

    java 遍历树的四种方式 最近做一个玫瑰图报表,数据源为TreeJson(树状json),在网上搜集下资料,和大家分享.: 先序遍历 中序遍历 后序遍历 层次遍历 public class Tree ...

  6. java的依赖注入_Java依赖注入的三种方式

    Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:组织方式注入,setter注入,基于注解的注入. 组织方式注入 组织器注入:保证了一些需要的属性在Bean实例化时就设 ...

  7. java tostring格式化日期_Java格式化日期的三种方式

    1)借助DateFormat类: public String toString(Date d) { SimpleDateFormat sdf = new SimpleDateFormat(" ...

  8. java 获取子文件夹_JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件...

    package ioTest.io3; import java.io.File; /* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 . * 并将文件夹和文件名称打印在控制台上面.并且要 ...

  9. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)

    读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...

最新文章

  1. oracle 11g 11.2.0.1 设置HuagePage导致TRC 变大 变多
  2. 机器不学习:CNN 入门讲解1-什么是卷积
  3. android canvas_Android 如何实现气泡选择动画
  4. 05 | 数组:为什么很多编程语言中数组都从0开始编号?
  5. LeetCode 1829. 每个查询的最大异或值(前缀异或 + 位运算)
  6. 数据结构前缀,后缀,中缀表达式
  7. mac安装python3.7_MAC 安装Python3.7
  8. Spring Security OAuth2.0_总结_Spring Security OAuth2.0认证授权---springcloud工作笔记157
  9. virtualenv 安装不同版本的虚拟环境的办法
  10. 一个精心制作的页眉样式
  11. 关于区块链你了解多少,用思维导图带你快速了解区块链
  12. 【Stats】Jarque Bera test正态性检验
  13. win10解除usb禁用_Windows10系统禁用usb存储设备的方法
  14. 药品集中采购系统mysql数据库数据_浙江省药品集中采购基础数据库资料申报说明及具体要求...
  15. USB HID报告描述符
  16. AI - Intelligent Agents
  17. 浪潮之巅-读书笔记二
  18. 不动点迭代 开平方 Excel演示
  19. 8080端口被占用处理方法
  20. “一路向南,dream it possible”之旅--骑行从北京到成都(一)

热门文章

  1. Android Studio导入别人的module提示错误Plugin with id ‘com.jfrog.bintray‘ not found.
  2. C++之函数指针实现函数回调
  3. php邮件发送tp,Thinkphp5 邮件发送Thinkphp发送邮件
  4. java 字节序列_java – 这个线程安全的字节序列生成器有什么问题?
  5. 开发文档模板_需求文档模板一堆什么样的适合你呢?
  6. 上公厕上一半突然被拽出来......
  7. 当代年轻人,都有些不成文的规定?
  8. 没有什么是日本牛郎店做不到的......
  9. 看着女朋友的肚子,以肉眼可见的速度大起来......
  10. 你家猫砸东西是不是也专挑贵的砸?