这是学校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 }