java实现文件夹(包括其中的子文件夹、子文件)的复制——递归

这是学校java课的一道实验题,题目如下:编程,根据指定的源和目标位置,完成指定文件或文件夹(包括其中的子文件夹、子文件)的复制。

以下是我的实现,使用了递归:

 1 package com.simon.myfinal;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.InputStream;
 7 
 8 /**
 9  * Created by Rainmer on 2015/6/28.
10  */
11 public class FileCopy {
12     public static void main(String[] args) {
13         String oldPath = "D:/bower";
14         String newPath = "D:/bowerCopy";
15         File dirNew = new File(newPath);
16         dirNew.mkdirs();//可以在不存在的目录中创建文件夹
17         directory(oldPath, newPath);
18         System.out.println("复制文件夹成功");
19     }
20 
21     /**
22      * 复制单个文件
23      * @param oldPath 要复制的文件名
24      * @param newPath 目标文件名
25      */
26     public static void copyfile(String oldPath, String newPath) {
27         int hasRead = 0;
28         File oldFile = new File(oldPath);
29         if (oldFile.exists()) {
30             try {
31                 FileInputStream fis = new FileInputStream(oldFile);//读入原文件
32                 FileOutputStream fos = new FileOutputStream(newPath);
33                 byte[] buffer = new byte[1024];
34                 while ((hasRead = fis.read(buffer)) != -1) {//当文件没有读到结尾
35                     fos.write(buffer, 0, hasRead);//写文件
36                 }
37                 fis.close();
38             } catch (Exception e) {
39                 System.out.println("复制单个文件操作出错!");
40                 e.printStackTrace();
41             }
42         }
43     }
44 
45     /**
46      *
47      * @param oldPath 要复制的文件夹路径
48      * @param newPath 目标文件夹路径
49      */
50     public static void directory(String oldPath, String newPath) {
51         File f1 = new File(oldPath);
52         File[] files = f1.listFiles();//listFiles能够获取当前文件夹下的所有文件和文件夹
53         for (int i = 0; i < files.length; i++) {
54             if (files[i].isDirectory()) {
55                 File dirNew = new File(newPath + File.separator + files[i].getName());
56                 dirNew.mkdir();//在目标文件夹中创建文件夹
57                 //递归
58                 directory(oldPath + File.separator + files[i].getName(), newPath + File.separator + files[i].getName());
59             } else {
60                 String filePath = newPath + File.separator + files[i].getName();
61                 copyfile(files[i].getAbsolutePath(), filePath);
62             }
63 
64         }
65     }
66 }

 

posted @ 2015-06-28 05:54  五毛程序员  阅读(3761)  评论(0编辑  收藏  举报