A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© feimingxuan 中级黑马   /  2016-6-7 22:37  /  1005 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima.day17;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Test02_CopyDir {
        public static void main(String[] args) throws IOException {
                /*
                 * 需求:复制文件夹
                 *         思路:
                 *                 1、定义一个方法,用来获取用户录入的文件夹路径。  getDir();
                 *                 2、定义一个方法,用来复制文件夹。        copyDirectory(File src,File dest);
                 */
                File src = getDir();        //获取数据源文件夹路径
                File dest = getDir();        //获取目的地文件夹路径
                if (src.equals(dest)) {
                        System.out.println("目标文件夹是源文件夹的子文件夹");
                }else {
                        copyDirectory(src, dest);
                        System.out.println("搞定");
                }
        }
       
        //1、定义一个方法,用来获取用户录入的文件夹路径。  getDir();
        public static File getDir(){
                /*
                 * 思路:
                 *         1、提示用户键盘录入一个文件夹路径。
                 *  2、接收用户录入的内容,然后封装成File对象,然后判断是否是文件夹。
                 *          是:直接返回
                 *          否:提示用户重新录入。
                 *         3、因为不知道用户多少次能录入争取,所以用while(true)改进。
                 */
                System.out.println("请输入一个文件夹路径");                //1
                while(true){                                                                //3
                        File file = new File(new Scanner(System.in).nextLine());        //2
                        if(!file.isDirectory()){                        //然后判断是否是文件夹
                                //进来说明用户录入的不是文件夹
                                System.out.println("录入有误,请重新录入");
                        }else {        //说明是文件夹,直接返回。
                                return file;
                        }
                }
        }
       
        //2、定义一个方法,用来复制文件夹。        copyDirectory(File src,File dest);  src是数据源文件夹  dest是目的地文件夹
        public static void copyDirectory(File src,File dest) throws IOException{
                /*
                 * 思路:
                 *         1、在目的地文件夹下创建一个和 数据源文件夹一样名字的文件夹。
                 *            注意先做判断,看文件夹是否存在。
                 *  2、获取到数据源文件夹下所有的文件(夹) 的 File[].
                 *  3、遍历第二步获取到的File[],获取到么一个File对象,然后判断
                 *          是文件: 直接拷贝。
                 *          是文件夹:就递归调用。
                 */
                File newDir = new File(dest,src.getName());                //1                newDir = "D:\test\dest\src";
                if (!newDir.exists()) {
                        newDir.mkdir();
                }
               
                File[] subFiles = src.listFiles();                                 //2
               
                for (File subFile : subFiles) {                                        //3
                        if (subFile.isFile()) {        //是文件就直接拷贝
                                //复制文件: 把subFile复制到:newDir文件夹中,注意保持文件夹一致                //难点,分析清楚 目的地文件夹是谁,以及保持文件夹名一致
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile)); //封装数据源
                                File file = new File(newDir,subFile.getName());                                                                         //获取目的地文件路径
                                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); //封装目的地
                                int ch = 0;
                                while((ch=bis.read())!=-1){
                                        bos.write(ch);
                                }
                                bis.close();
                                bos.close();
                        }else {        //是文件夹,就递归调用
                                copyDirectory(subFile,newDir);                        //难点,分析清楚那个文件夹和哪个文件夹递归
                        }
                }
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马