递归调用copydir方法实现,查询源文件目录使用字节输入流写入字节数组,如果目标文件目录没有就创建目录,如果迭代出是文件夹使用字节输出流对拷文件,直至源文件目录没有内容。
/** * 复制文件夹 * @param srcdir 源文件目录 * @param destdir 目标文件目录 */ public static void copydir(string srcdir, string destdir) { if (srcroot == null) srcroot = srcdir; //源文件夹 file srcfile = new file(srcdir); //目标文件夹 file destfile = new file(destdir); //判断srcfile有效性 if (srcfile == null || !srcfile.exists()) return; //创建目标文件夹 if (!destfile.exists()) destfile.mkdirs(); //判断是否是文件 if (srcfile.isfile()) { //源文件的绝对路径 string abspath = srcfile.getabsolutepath(); //取出上级目录 string parentdir = new file(srcroot).getparent(); //拷贝文件 copyfile(srcfile.getabsolutepath(), destdir); } else { //如果是目录 file[] children = srcfile.listfiles(); if (children != null) { for (file f : children) { copydir(f.getabsolutepath(), destdir); } } } }
/** * 复制文件夹 * * @param path 路径 * @param destdir 目录 */ public static void copyfile(string path, string destdir) { fileinputstream fis = null; fileoutputstream fos = null; try { /* 准备目录 取出相对的路径 创建目标文件所在的文件目录 */ string tmp = path.substring(srcroot.length()); string folder = new file(destdir, tmp).getparentfile().getabsolutepath(); file destfolder = new file(folder); destfolder.mkdirs(); system.out.println(folder); //创建文件输入流 fis = new fileinputstream(path); //定义新路径 //创建文件 输出流 fos = new fileoutputstream(new file(destfolder,new file(path).getname())); //创建字节数组进行流对拷 byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { fos.write(buf, 0, len); } } catch (ioexception ex) { ex.printstacktrace(); } finally { try { fis.close(); fos.close(); } catch (ioexception e) { e.printstacktrace(); } } }