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