文件夹的拷贝

文件夹用来把文件包裹起来,褪去这些外衣,说到底拷贝文件夹也就是拷贝文件

模拟实例:将F:/Picture/test 文件夹 拷贝到 F:/Picture/dir文件夹

该实例中test文件夹下只包含了test.txt文件

步骤分析:

1.通过路径得到File对象

2.递归查找子孙级文件夹或者文件

3.复制文件(同文件拷贝)

那么重点是在第二个步骤,我们可以通过File对象的listFiles方法得到目标文件夹下所包括的文件,listFiles方法返回一个泛型为File的集合list,由此我们就得到了test文件夹下所有的文件,通过foreach循环语句遍历这个list,得到的每一个File对象,首先要做的就是判断这个File对象是文件还是文件夹,如果是文件就可直接copy,如果是文件夹,则需要再通过listFiles方法得到目标文件夹下所包括的文件,步骤与上面一致,这也就是递归的思想

需要注意的一点是,我们需要把整个test文件夹拷贝到dir文件夹,那么当遍历到test文件夹下的test.txt文件时,我们在拷贝的时候,需要重新创建一个新的目标文件,dir/test/text.txt.,这就需要File的另一个构造方法

File(File parent, String child) 
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例

在得到dir这个文件夹的时候,也应该用上述构造方法,得到dir/testFile新对象

在拷贝文件的时候,使用了不同的流,
之前拷贝文件使用的FileInputStream与FileOutputStream,

这里使用了BufferedInputStream与BufferedOutputStream,使用方法相似

InputStream is =new BufferedInputStream(new FileInputStream(src));  
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest)); 

 

 

 

package file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtil { 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
// 源目录 
String srcPath = "C:\\Users\\Administrator\\Desktop\\bbb"; 

// 目标目录 
String destPath = "C:\\Users\\Administrator\\Desktop\\ccc"; 

//进行拷贝 
try { 
copyDir(srcPath, destPath); 
} catch (FileNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 



/** 
* 通过路径获得File对象 

* @param src源路径 
* @param dest目标路径 
* @throws IOException 
* @throws FileNotFoundException 
*/ 
public static void copyDir(String srcPath,String destPath) throws FileNotFoundException, IOException{ 
//拒绝自己拷贝给自己 
if(srcPath.equals(destPath)){ 
return ; 

File src=new File(srcPath); 
File dest =new File(destPath); 
copyDir(src,dest); 




/** 
* 拷贝文件夹 
* @param src 源File对象 
* @param dest 目标File对象 
* @throws IOException 
* @throws FileNotFoundException 
*/ 
public static void copyDir(File src,File dest) throws FileNotFoundException, IOException{ 
if(src.isDirectory()){ //文件夹 
dest =new File(dest,src.getName()); 
if(dest.getAbsolutePath().contains(src.getAbsolutePath())){ 
System.out.println("父目录不能拷贝到子目录中"); 
return; 


copyDirDetail(src,dest); 


/** 
* 拷贝文件夹细节 
* @param src 
* @param dest 
*/ 
public static void copyDirDetail(File src,File dest) throws FileNotFoundException,IOException{ 
if(src.isFile()){ //文件 
copyFile(src, dest); 
}else if(src.isDirectory()){ //文件夹 
//确保目标文件夹存在 
dest.mkdirs(); 
//获取下一级目录|文件 
for(File sub:src.listFiles()){ 
copyDirDetail(sub,new File(dest,sub.getName())); 





/** 
* 文件的拷贝,得到File对象 
* @param 源文件路径 
* @param 目录文件路径 
* @throws FileNotFoundException,IOException 
* @return 
*/ 
public static void copyFile(String srcPath,String destPath) throws FileNotFoundException,IOException { 
//1、建立联系 源(存在且为文件) +目的地(文件可以不存在) 
copyFile(new File(srcPath),new File(destPath)); 

/** 
* 文件的拷贝 
* @param 源文件File对象 
* @param 目录文件File对象 
* @throws FileNotFoundException,IOException 
* @return 
*/ 
public static void copyFile(File src,File dest) throws FileNotFoundException,IOException { 
if(! src.isFile()){ //不是文件或者为null 
System.out.println("只能拷贝文件"); 
throw new IOException("只能拷贝文件"); 

//dest为已经存在的文件夹,不能建立于文件夹同名的文件 
if(dest.isDirectory()){ 
System.out.println(dest.getAbsolutePath()+"不能建立于文件夹同名的文件"); 
throw new IOException(dest.getAbsolutePath()+"不能建立于文件夹同名的文件"); 


//2、选择流 
InputStream is =new BufferedInputStream(new FileInputStream(src)); 
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest)); 

//3、文件拷贝 循环+读取+写出 
byte[] flush =new byte[1024]; 
int len =0; 

//读取 
while(-1!=(len=is.read(flush))){ 
//写出 
os.write(flush, 0, len); 

os.flush(); //强制刷出 

//关闭流 
os.close(); 
is.close(); 

}

转载于:https://www.cnblogs.com/chinaifae/p/10328796.html

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

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

相关文章

【抽奖】若川诚邀你加前端群,长期交流学习~

最近有许多读者朋友关注了我,加我好友没有来得及拉群交流。另外偷偷告诉你:公众号回复 411,参与抽奖,送极客时间100元以内的课程,今晚八点开奖,必须开奖前加了我的微信&&像是前端&&关注了我…

帝国cms重置管理员_重新设计《纽约时报》 CMS飞行员

帝国cms重置管理员1.什么是飞行员? (1. What Is Pilot?) For 10 weeks, I joined The New York Times’s Story Formats team as a Product Design Intern. Partnered with technology intern Shormie Faruque, we were tasked with redesigning Pilot.大约十个星期…

微信小程序开发 Request Headers: Provisional headers are shown

在微信小程序开发的时候,写了两个API请求: 请求A://请求Awx.request({url: https://wx.baidu.com/api/wx/getBallByDate,method: POST,dataType: json,data: {date: that.data.curDate},header: {content-type: application/json},success: function(dt…

昆山万象汇机器人_昆山十镇,在售新盘汇总

陆家建伟国际汽车城,均价 7500 元/㎡美吉特家居广场,均价 17000 元/㎡美吉特灯都,均价 17000 元/㎡花桥绿地象屿苏河公园,均价 22950 元/㎡凯德都会新峰,均价 21500 元/㎡越洋国际,均价 18000 元/㎡浦西玫瑰…

Mini 容器学习笔记6——组件的获取(应用)

1. 通过组件Id获取组件实例&#xff1a; [Test]public void GetByIdTest(){ServiceRegistry.Register<Person>("person");var person ServiceLocator.Get<IPerson>("person");Assert.IsTrue(person ! null);var person2 ServiceLocator.Get&…

JavaScript ES2021 最值得期待的 5 个新特性解析

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天分享一篇关于ES2021的5个新特性。点击下方卡片关注我&#xff0c;或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列在写本文时&#xff0c;本文提到的新的 JavaScript …

uniapp延迟执行_uniapp微信小程序真机调试点击按钮有1秒延迟

详细问题描述(DCloud产品不会有明显的bug&#xff0c;所以你遇到的问题大都是在特定环境下才能重现的问题&#xff0c;请仔细描述你的环境和重现方式&#xff0c;否则DCloud很难排查解决你的问题)[内容]开发uniapp小程序项目时,在页面中点击按钮后, 数据即时更新, 视图层延迟1秒…

latex排版基础_排版基础分类

latex排版基础重点 (Top highlight)There are many parts to creating a beautiful, functional, memorizing design. That’s what all User Experience designers set out to do. You need to consider your users, strategy, features, content, color, and so much more. A…

AS3 CookBook学习整理(一)

1. 我要改变swf的尺寸和颜色 在flex builder 3里&#xff0c;默认会生成一个全屏、背景色为#869CA7、帧数为24/秒的swf文件&#xff0c;要修改这些参数&#xff0c;只需要在类文件中定义 [SWF(width"800", height"600", backgroundColor"#ffffff"…

微信小程序研发问题梳理:翻页:下拉:缓存:canvas:富文本:分享

微信小程序研发问题梳理 最近鼓捣小程序的时候&#xff0c;着实遇到了一些问题&#xff0c;尽管有些再翻看文档几遍&#xff0c;就能找到答案&#xff0c;但还是要发挥下烂笔头的功效&#xff0c;顺便梳理下。 问题列表 登录流程小程序标签页地址无法跳转问题页面翻页内容加…

Nginx重启方式

2019独角兽企业重金招聘Python工程师标准>>> 重启方式有三种&#xff1a; 1.简单型&#xff0c;先关闭进程&#xff0c;修改你的配置后&#xff0c;重启进程。 2.重新加载配置文件&#xff0c;不重启进程&#xff0c;不会停止处理请求 3.平滑更新nginx二进制&#x…

axure如何页面滑动时广告位上移_新手APP运营如何做广告位投放

运营是什么&#xff1f;这种问题在各种论坛、贴吧、百度知道、问答百科类中都会出现。上面也有各种大神各式各样的回答&#xff0c;从不同角度向我们阐述了什么是运营。用 户运营、内容运营、社区运营、活动运营、市场运营、等等&#xff0c;各种各样的文章对它们有非常多的分类…

常见的8个前端防御性编程方案

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天分享几个常见的前端防御性编程方案。点击下方卡片关注我&#xff0c;或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列关于前端防御性编程我们大多数情况可能遇到过&am…

比特平面分层_平面设计中的分层

比特平面分层One of the first windows to pop up automatically, when I first started using Adobe Photoshop back in 2013, was the Layers one. Albeit I was dabbling around with it for making memes, it was one of the first things I played around with.2013年&…

微软中国推校园先锋计划,保障学生低价获取正版软件

2010年7月13日&#xff0c;人人网 Lucky 7 率先向同学们宣布了"微软校园先锋计划"上线的消息&#xff0c;该计划现在接受学生预购正版 Windows 7 专业版和 Office 2010 专业版&#xff0c;正式销售的日期为7月19日。该计划的官网是&#xff1a;http://ms.shop.edu.cn…

Nginx laraval-admin 页面小图标不显示 问题处理

laraval-admin 页面小图标不显示 类似问题 nginx下加载eot|otf|ttf|woff|svg等404 错误问题 浏览器console控制台报错 GET http://admin.xxx.com/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.woff2 net::ERR_ABORTED 404 (Not Found)CSS 样式引用字体 font-face …

Ajax完整资料加代码

什么是Ajax&#xff1f;答&#xff1a;Ajax是一种无需加载整个网页&#xff0c;就能够更新部分网页&#xff0c;与后台交互的技术。Ajax的优点&#xff1f;答&#xff1a;能够在不更新整个页面的前提下&#xff0c;维护数据。这使得Web程序可以更快速的回应用户的动作&#xff…

did双重差分法_Stata中双重差分操流程及代码

01简介现代计量经济学和统计学的发展为我们的研究提供了可行的工具。倍差法来源于计量经济学的综列数据模型&#xff0c;是政策分析和工程评估中广为使用的一种计量经济方法。主要是应用于在混合截面数据集中&#xff0c;评价某一事件或政策的影响程度。该方法的基本思路是将调…

Axios 如何缓存请求数据?

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天推荐这篇Axios缓存请求数据的文章&#xff0c;相信是常见的业务场景&#xff0c;感兴趣的读者可以看看 umi-request&#xff0c;支持缓存功能。另外我之前也写过 axios源码文章&#xff0c;…

Reflection in .net

最近在看设计模式的一些东西&#xff0c;在讲到builder模式中使用到了c#的反射机制&#xff0c;从网上找了写资料&#xff0c;整理如下&#xff1a; 在C#中&#xff0c;我们要使用反射&#xff0c;首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间(1) App…