DFS遍历拷贝所有子文件夹及目录列表 (Java版)

如题
  • 注意,文件夹是不能拷贝的, 需要mkdir的
  • 文件选择合适的流进行拷贝
main测试方法
/**
     * 主测试类,默认将D:\\base01 下的复制到D:\\base02
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        String originUrl;
        String targetUrl;
        
        System.out.println("请输入源目录: "+"D:\\base01");
//      originUrl = scanner.next();
        originUrl = "D:\\base01";
        System.out.println("请输入目标目录: "+"D:\\base02");
//      targetUrl = scanner.next();
        targetUrl = "D:\\base02";
        
        System.out.println("正在将"+originUrl+"目录下全部文件复制到"+targetUrl+".........");
        
        //Show Time , 先遍历,再逐个复制即可1
        File beginDir = new File(originUrl); 
        File endDir = new File(targetUrl); 
        
        //获取第一层目录, 遍历, 深度优先搜索
        File[] childFileArr = beginDir.listFiles();
        dfsDir(childFileArr,originUrl,targetUrl);
        
        System.out.println("复制成功--");
    }
dfs复制方法
/**
     * dfs复制,文件夹mkdir后进入递归,文件直接拷贝
     * @param childFileArr
     * @throws IOException 
     */
    public static void dfsDir(File[] childFileArr,String readerUrl,String writerUrl) throws IOException {
        //遍历
        for(File file : childFileArr) {
            //计算到拷贝的目标文件夹名称
            File targetDir = new File(writerUrl+"\\"+file.getName());
            
            //判断
            if(file.isDirectory()) {
                //是文件夹需要先mkdir targetDir
                 if(!targetDir.exists()){
                     targetDir.mkdirs();
                }
                //文件夹dfs搜下去即可
                 dfsDir(file.listFiles(),file.getAbsolutePath(),targetDir.getAbsolutePath());
            }
            else {
            //是文件进行复制
                copyFileReaderWriter(file.getAbsolutePath(),targetDir.getAbsolutePath());
            }
        }
    }
copyFileReaderWriter,文件的复制, 自行根据使用场景进行替换;比如音频不能用此字符流方法, 字符流多是用于文本复制

   /**
    * 根据Url进行文件的复制
    * @param readerUrl 字符流输入流
    * @param writerUrl 字符流输出流
    * @throws IOException
    */
   public static void copyFileReaderWriter(String readerUrl,String writerUrl) throws IOException {
       Reader reader = new FileReader(readerUrl);
       Writer writer = new FileWriter(writerUrl);
       char[] arr = new char[5];
       try {
           int len=0;
           while((len=reader.read(arr))!=-1) {
               writer.write(new String(arr,0,len));
           }
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }finally {
           reader.close();
           writer.close();
       }
   }
测试输出
请输入源目录: D:\base01
请输入目标目录: D:\base02
正在将D:\base01目录下全部文件复制到D:\base02.........
复制成功--
测试结果

运行成功,所有子文件夹及目录均已拷贝成功.

你可能感兴趣的:(DFS遍历拷贝所有子文件夹及目录列表 (Java版))