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

2023-11-13

这篇文章主要介绍了java复制文件的4种方式,通过实例带给大家介绍了java 拷贝文件到另一个目录下的方法,需要的朋友可以参考下

尽管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);
}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 面试经验分享

    核心 几个大块的内容 前期准备 简历 自信 实力 态度 语言表达 1 简历制作 简历要有特点 将博客 GitHub 自己的作品链接 还有电子版本的简历链接直接写上去 很重要 特长描述 工作经历 岗位职责 技能描述 项目经历描述 每一个项目都
  • Altium Designer中的电路仿真

    今天看了下Altium Designer的电路仿真功能 发现它还是蛮强大的 按着help里面的文档 TU0106 Defining running Circuit Simulation analyses PDF 跑了一下 觉得还行 所以就把
  • 【满分】【华为OD机试真题2023 JAVA&JS】寻找符合要求的最长子串

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 寻找符合要求的最长子串 知识点双指针 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个字符串 s 找出这样一个子串 1 该子串中的任意一个字符最多出现2次
  • Type-C协议简介(CC检测原理)

    Type C协议简介 CC检测原理 作者 AirCity 2019 12 15 Aircity007 sina com 本文所有权归作者Aircity所有 1 简介 越来越多的手机开始采用Type C作为充电和通信端口 Type C连接器实
  • mesa源码阅读笔记(7)_顶点变换流程解析

    mesa源码阅读笔记 7 顶点变换流程解析 好久没有写博客 同时也放下对mesa源码的阅读很久了 这一篇会是我最后的一篇 有不尽到之处也会放下了 毕竟OpenGL不是我的强项 后面可能没有这么多时间来关注了 这篇文章有点长 而我也不知道自己
  • 毕设-解决移动端用HTTP协议从onenet平台上获取数据流的多个数据点的问题

    onenet平台 OneNET是由中国移动打造的PaaS物联网开放平台 平台能够帮助开发者轻松实现设备接入与设备连接 快速完成产品开发部署 为智能硬件 智能家居产品提供完善的物联网解决方案 产品信息 至于怎么创建产品我就不做过多的介绍了 我
  • 最大公约数和最小公倍数(详解有实例)C语言

    最大公约数这里我运用了辗转相除法来实现 辗转相除法的意思是给出所要求的两个数之后 用大数取余小数 如果为0 那么那个小数就是最大公约数 如果不为1 我再用较大的数取余上个余数 依次循环 最后得到结果 给大家举个例子吧 12和16 首先用16
  • 云原生之使用minikube快速部署本地k8s集群

    云原生之使用minikube快速部署本地k8s集群 一 minikube 介绍 1 minikube简介 2 minikube特点 3 minikube的基本架构 二 本次实践介绍 1 本次实践目的 2 部署环境要求 3 本地环境规划 三
  • 视频流截取保存到本地路径(打包jar包CMD运行)

    需求 现在有一批https的监控视频流URL 需要以多线程模式监听视频流 对视频流进行每三秒截屏一次 将截取的图片post请求发送 根据响应判断图片是否保存到本地 保存时以当前时间命名 代码 BufferedImage类 import or
  • 匿名内部类在开发中的真实使用场景演示

    package Java project 1 import javax swing import java awt event ActionEvent import java awt event ActionListener public
  • linux开启使用ftp

    一 检查系统是否安装vsftpd rpm qa grep vsftpd 这里是安装好了 才会出现版本信息 没有安装不会出现 如果想删除卸载vsftpd使用 rpm qa grep vsftpd 查询出来版本好 通过 rpm e vsftpd
  • libuv使用总结

    libuv是单线程的 依靠uv run轮训当前线程关心的事件IO 所以这些函数的回调里尽量不要有阻塞的函数 否则回调之间相互影响 导致另外的回调走不到 libuv如果使用不当 会造成coredump 多线程用多线程的接口 单线程用单线程的接
  • jemalloc原理分析

    jemalloc原理分析 转载自http club alibabatech org article detail htm articleId 36 首先介绍一下jemalloc中的几个核心概念 1 arena jemalloc的核心分配管理
  • Android中应用程序清除data/data,清除缓存,兼容8.0系统

    前言 最近实现了一款系统级应用中心 需要获取已安装APP的缓存大小以及清除缓存 获取缓存的在另外一篇博客总结过 获取APP缓存大小 因此这篇文章记录一下如何清除缓存 一 安卓8 0之前 1 首先需要自己创建几个AIDL文件 方法在前言连接里
  • 多线程之实现Callable接口

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 调用方法 点击量 月 年 Callable public void yearlyClickCallable 获取参数 String year getPara year 统计
  • 3-13反思总结

    1 innerHTML 修改 HTML 内容的最简单的方法是使用 innerHTML 属性 这句话的说法是错误的 innerHTML属性用于获取或替换 HTML 元素的内容 不能用来修改内容 2 null与undifined 1 null
  • k8s,30分钟部署一个kubernetes集群【1.17】

    作者 李振良 官方网站 http www ctnrs com kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具 这个工具能通过两条指令完成一个kubernetes集群的部署 创建一个 Master 节点 kube
  • Java如何读取文件文本内容的几种方式汇总

    本文为joshua317原创文章 转载请注明 转载自joshua317博客 Java如何读取文件文本内容的几种方式汇总 joshua317的博客 package com joshua317 import java io import jav
  • Python爬虫学习笔记(三)————urllib

    目录 1 使用urllib来获取百度首页的源码 2 下载网页图片视频 3 总结 1 4 请求对象的定制 解决第一种反爬 5 编解码 1 get请求方式 urllib parse quote 2 get请求方式 urllib parse ur
  • java复制文件的4种方式及拷贝文件到另一个目录下的实例代码

    这篇文章主要介绍了java复制文件的4种方式 通过实例带给大家介绍了java 拷贝文件到另一个目录下的方法 需要的朋友可以参考下 尽管Java提供了一个可以处理文件的IO操作类 但是没有一个复制文件的方法 复制文件是一个重要的操作 当你的程