• 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:ase01
    请输入目标目录: D:ase02
    正在将D:ase01目录下全部文件复制到D:ase02.........
    复制成功--
    
    测试结果

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

  • 相关阅读:
    widget的进一步使用,利用AppWidgetProvider实现桌面的时钟挂件
    opengl绘图,画一个旋转的四边形和一个旋转的三角形,平滑着色和单一着色
    opengl se画图
    绘制立方体和单个的矩阵,并映射纹理图像
    opengl的坐标和glFrustumf的设定及参数相关意义
    glDrawElements 和glDrawArrays
    spring mvc的拦截器
    spring mvc 文件上传
    spring mvc返回json字符串的方式
    springmvc的数据校验
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/11052596.html
Copyright © 2020-2023  润新知