使用 I/O 流和文件对象实现目录备份功能。
1 package asg5; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 public class copyFileDir { 7 8 9 10 public static void main(String[] args) throws IOException 11 { 12 copyDir("D:\大二\java\Java程序设计课件", "D:\大二\java\1"); 13 } 14 /** 15 * 使用递归复制目录, 16 * 17 * @param FromDir 18 * 源目录的路径名称 19 * @param ToDir 20 * 目的目录的路径名称 21 * @throws IOException 22 */ 23 public static void copyDir(String FromDir, String ToDir) throws IOException 24 { 25 // 创建目录的File对象 26 File srcDir = new File(FromDir); 27 // 判断源目录是不是一个目录 28 if (!srcDir.isDirectory()) 29 { 30 // 如果不是目录那就不复制 31 return; 32 } 33 // 创建目的目录的File对象 34 File destDir = new File(ToDir); 35 // 如果目的目录不存在 36 if (!destDir.exists()) 37 { 38 // 创建目的目录 39 destDir.mkdir(); 40 } 41 42 // 获取源目录下的File对象列表,每一个对象代表一个目录或者文件 43 File[] srcDirList = srcDir.listFiles(); 44 // 遍历源目录File对象列表 45 for (int i = 0; i < srcDirList.length; i++) 46 { 47 // 如果是目录的话 48 if (srcDirList[i].isDirectory()) 49 50 { 51 // 递归调用复制该目录 52 copyDir(FromDir + File.separator + srcDirList[i].getName(), 53 ToDir + File.separator + srcDirList[i].getName()); 54 } 55 // 如果是文件的话 56 if (srcDirList[i].isFile()) 57 { 58 // 调用复制文件的方法 59 copyFile(FromDir + File.separator + srcDirList[i].getName(), 60 ToDir + File.separator + srcDirList[i].getName()); 61 } 62 63 } 64 } 65 /** 66 * 复制一个文件 67 * 68 * @param srcFile 69 * 源文件 70 * @param destFile 71 * 目的文件 72 * @throws IOException 73 */ 74 public static void copyFile(String srcFile, String destFile) 75 throws IOException 76 { 77 FileInputStream in = new FileInputStream(srcFile); 78 FileOutputStream out = new FileOutputStream(destFile); 79 // 2097152(Byte)=2048(KB)=2M 80 byte[] buffer = new byte[2097152]; 81 int size = 0; 82 // 每次读取一个字节数组 83 while ((size = in.read(buffer)) != -1) 84 { 85 // 读到多少写入多少 86 out.write(buffer, 0, size); 87 } 88 in.close(); 89 out.close(); 90 } 91 92 } 93
用户指定源目录、目标目录以及备份文 件类型(如果是任意文件使用通配符*号),通过此程序可将源目录及其所有子目录 下的指定类型文件保存到目标目录