拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等。但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法。

[java] view plaincopyprint?
import java.io.*;
/**
* 复制文件夹或文件夹
*/
public class CopyDirectory {
// 源文件夹
static String url1 = "f:/photos";
// 目标文件夹
static String url2 = "d:/tempPhotos";
public static void main(String args[]) throws IOException {
// 创建目标文件夹
(new File(url2)).mkdirs();
// 获取源文件夹当前下的文件或目录
File[] file = (new File(url1)).listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
// 复制文件
copyFile(file[i],new File(url2+file[i].getName()));
}
if (file[i].isDirectory()) {
// 复制目录
String sourceDir=url1+File.separator+file[i].getName();
String targetDir=url2+File.separator+file[i].getName();
copyDirectiory(sourceDir, targetDir);
}
}
}
// 复制文件
public static void copyFile(File sourceFile,File targetFile)
throws IOException{
// 新建文件输入流并对它进行缓冲
FileInputStream input = new FileInputStream(sourceFile);
BufferedInputStream inBuff=new BufferedInputStream(input); // 新建文件输出流并对它进行缓冲
FileOutputStream output = new FileOutputStream(targetFile);
BufferedOutputStream outBuff=new BufferedOutputStream(output); // 缓冲数组
byte[] b = new byte[1024 * 5];
int len;
while ((len =inBuff.read(b)) != -1) {
outBuff.write(b, 0, len);
}
// 刷新此缓冲的输出流
outBuff.flush(); //关闭流
inBuff.close();
outBuff.close();
output.close();
input.close();
}
// 复制文件夹
public static void copyDirectiory(String sourceDir, String targetDir)
throws IOException {
// 新建目标目录
(new File(targetDir)).mkdirs();
// 获取源文件夹当前下的文件或目录
File[] file = (new File(sourceDir)).listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
// 源文件
File sourceFile=file[i];
// 目标文件
File targetFile=new
File(new File(targetDir).getAbsolutePath()
+File.separator+file[i].getName());
copyFile(sourceFile,targetFile);
}
if (file[i].isDirectory()) {
// 准备复制的源文件夹
String dir1=sourceDir + "/" + file[i].getName();
// 准备复制的目标文件夹
String dir2=targetDir + "/"+ file[i].getName();
copyDirectiory(dir1, dir2);
}
}
}
}

最新文章

  1. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
  2. TFS 安装错误
  3. 如何让vim自动显示函数声明-使用 echofunc.vim插件
  4. JAVA小知识
  5. [测]jieba分词
  6. iOS开发数据库篇—FMDB简单介绍
  7. nodejs 微信中使用file组件上传图片在某些机型上点击无反应
  8. WEB服务器1--开篇
  9. android开源框架和开源项目(转)
  10. 结对编程-四则运算GUI的实现
  11. Design Mobile实现国际化
  12. MacOS下好用的截图软件snip
  13. springMVC下载中文文件名乱码【原】
  14. dalaozouleyeyaojianqiangdehuoxiaqu
  15. virtualbox 中centOS在不能ssh
  16. 对SQL语句进行过滤的函数
  17. Inside Amazon&#39;s Kafkaesque &quot;Performance Improvement Plans&quot;
  18. docker 部署django项目(nginx + uwsgi +mysql)
  19. GearCase UI - 自己构建一套基于 Vue 的简易开源组件库
  20. SQLite的升级(转)

热门文章

  1. Oracle session连接数和inactive的问题记录
  2. Linq查询Count、Sum、Min、Max、Average
  3. [转载]Spring Autowire自动装配介绍
  4. 让DJANGO里的get_success_url定义的reverse_lazy带参数跳转
  5. hdu 4418 Time travel 概率DP
  6. jQuery从主页面存取控制 iframe 中的元素,参数及方法
  7. Oracle 10 - 数据库表
  8. PHP中的多态
  9. Java类的加载、链接和初始化
  10. Tomcat集群配置学习篇-----分布式应用