1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 10 /** 11 * 文件的复制: 12 * 思路:通过递归实现文件目录的复制,通过流的来复制文件。 13 * 方法: 14 * 1.遍历目录和文件,如果为目录则先复制目录及其子目录到指定目录下。 15 * 2.如果非目录则通过流的形式将该目录下的文件复制到指定目录下。 16 * 3.调用自身方法,实现递归。 17 * 4.如此实现复制目录及其目录下的所有子目录和文件到指定目录下。 18 * 用到的技术: 19 * 用File类来实现文件目录的复制。IO流来实现文件文本的复制 20 * @author user 21 * 22 */ 23 24 public class CopyFileTest { 25 26 public static void main(String[] args) { 27 String srcPath = "E:\Workspaces\day16"; 28 String destPath = "F:\Workspaces\day16"; 29 File src = new File(srcPath); //源文件 30 File dest = new File(destPath); //目的文件 31 32 try { 33 copyFolder(src, dest); 34 } catch (IOException e) { 35 // TODO Auto-generated catch block 36 e.printStackTrace(); 37 } 38 System.out.println("程序执行完毕"); 39 } 40 41 private static void copyFolder(File src, File dest) throws IOException { 42 if (src.isDirectory()) { //判读是否目录 43 if (!dest.exists()) { //判断路径名是否存在 44 dest.mkdirs(); //创建文件目录及其子目录 45 } 46 //src.list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 47 String files[] = src.list(); //创建字符串数组,存储文件路径 48 //遍历文件目录 49 for (String file : files) { 50 //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例 51 File srcFile = new File(src, file); 52 File destFile = new File(dest, file); 53 // 递归复制 54 copyFolder(srcFile, destFile); 55 } 56 } else { 57 //创建流对象 58 InputStream in = new FileInputStream(src); 59 OutputStream out = new FileOutputStream(dest); 60 61 //创建一个byte数组用做缓冲区 62 byte[] buffer = new byte[1024]; 63 64 //将数据加入buffer数组 65 in.read(buffer); 66 67 //将数据加载入缓存区中 68 ByteArrayInputStream bis = new ByteArrayInputStream(buffer); 69 70 //实例化一个ByteArrayOutputStream 71 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 72 73 //定义一个字符串数据 74 String str = bis.toString(); 75 //定义一个byte[]数组 76 byte[] b = str.getBytes(); 77 //将b的内容拷贝到缓冲区 78 bos.write(b, 0, b.length); 79 //获取当前缓冲区的大小 80 System.out.println(bos.size()); 81 82 //将缓冲区的数据写入到OutputStream中 83 bos.writeTo(out); 84 85 //关闭流 86 in.close(); 87 out.close(); 88 } 89 } 90 91 }