复制文件夹
字节流
BufferedInputStream,BufferedOutputStream
FileInputStream,FileOutputStream
问题分解
(1) 复制一个文件 copyFile()
(2) 指定目录下的所有文件 copyDir()
(3) 指定目录下的所有文件及子目录下的所有文件 ---递归调用copyDir

 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; public class TestCopy {
public static void main(String[] args) { File srcDir=new File("D:\\PanDownload");
File targetDir=new File("F:\\PanDownload");
//调用复制指定目录下所有文件的方法
copyDir(srcDir, targetDir);
}
public static void copyDir(File srcDir,File targetDir){
if(!targetDir.exists()){
targetDir.mkdir();//如果目的地的目录不存在,则需要使用File类的方法进行创建目录
}
File []files=srcDir.listFiles(); //获取指定目录下的所有File对象
for (File file : files) {
if (file.isFile()) {
//如果file是文件则复制 srcDir -->D:\\PanDownload 拼接 D:\\PanDownload\\XXXX文件
// targetDir-->E:\\PanDownload 拼接 E:\\PanDownload\\XXXX文件
copyFile(new File(srcDir+"\\"+file.getName()), new File(targetDir+"\\"+file.getName()));
}else{
//不是继续调用该方法判断,使用递归实现
copyDir(new File(srcDir+"\\"+file.getName()), new File(targetDir+"\\"+file.getName()));
}
}
}
public static void copyFile(File srcFile,File targetFile){
//(1)提高读取效率,从数据源
BufferedInputStream bis=null;
//(2)提高写入效率,写到目的地
BufferedOutputStream bos=null;
try {
bis = new BufferedInputStream(new FileInputStream(srcFile)); bos = new BufferedOutputStream(new FileOutputStream(targetFile));
//(3)边读边写
byte [] buf=new byte[1024];//中转站
int len=0;//用于存储读到的字节的个数
while((len=bis.read(buf))!=-1){
bos.write(buf,0,len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//(4)关闭
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}
}

最新文章

  1. Android Material Design 兼容库的使用
  2. HTML 学习笔记 JavaScript(事件)
  3. IntelliJ IDEA 常用设置讲解1
  4. P1179: [Apio2009]Atm
  5. 【Shell脚本学习5】第一个Shell脚本
  6. Winform 拦截最小化、最大化、关闭事件【整理】
  7. Prison Break
  8. codevs 2622 数字序列
  9. PermutationTwo
  10. IDEA环境下GIT操作浅析之二-idea下分支操作相关命令
  11. 操作系统04_IO管理
  12. Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架
  13. cbuild-一个创建和管理C++项目的工具
  14. 【计算机视觉】如何使用于仕琪老师的libfacedetect人脸检测库
  15. python3中文件操作及编码
  16. InnoDB事务日志(redo log 和 undo log)详解
  17. About LabView
  18. cookie和session的区别与联系
  19. BZOJ5340: [Ctsc2018]假面
  20. 从统计学statistics的观点看概率分布

热门文章

  1. 【20】策略者模式(Strategy Pattern)
  2. LSApplicationQueriesSchemes--关于info.plist 第三方登录 添加URL Schemes白名单
  3. 微信服务号 redirect_uri域名与后台配置不一致,错误代码10003
  4. 【代码笔记】Web-JavaScript-JavaScript 数据类型
  5. pycharm如何新项目如何不默认创建虚拟环境(吐槽)
  6. 从零自学Java-9.描述对象
  7. NB-IOT模块 M5310-A接入百度开放云IOT Hub MQTT
  8. 洗礼灵魂,修炼python(53)--爬虫篇—urllib模块
  9. sql server 转置 和实现随机分配和一串代码的含义拼在一行
  10. little kernel 小结