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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小小菜菜

中级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 小小菜菜 中级黑马   /  2016-1-18 00:40  /  358 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.heima.递归练习;

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 Test3 {

        /**
         * 3,从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         * 从键盘接收两个文件夹路径,
         * 分析:
         * 1.创建键盘录入对象
         * 2,将录入的文件夹路径封装成路径对象
         * 3,判断路径是否存在,是否是文件夹路径,是就返回
         * 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         * 1,创建File数组方便获取文件夹和文件
         * 2,遍历数组
         * 3.判断数组元素,如果是文件就读写,如果是文件夹就递归
         * @throws IOException
         *
         */
        public static void main(String[] args) throws IOException {
                long l = System.currentTimeMillis();
                File file = getDir();
                File file2 = getDir();
                if(file.equals(file2)){
                        System.out.println("目标文件夹是源文件夹的子文件夹");
                }else{
                        copy(file,file2);
                }
                System.out.println((System.currentTimeMillis()-l)/1000);
        }
        /**
         *返回值类型 File
         *无参数
         */
        public static File getDir(){
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入文件夹路径");
                while(true){
                        String line = sc.nextLine();
                        File file = new File(line);
                        if(!file.exists()){
                                System.out.println("请输入存在的文件夹路径");
                        }else if(file.isFile()){
                                System.out.println("请输入文件夹路径");
                        }else{
                                return file;
                        }
                }
        }
        /**
         * 返回值类型void
         * 参数列表 File file , File fi
         * @throws IOException
         * @throws IOException
         */
        public static void copy(File fi , File file) throws IOException{
                //在目标文件夹中创建源文件夹
                File dir = new File(file , fi.getName());
                dir.mkdir();
                //江源文件夹中的文件和文件夹存储在File数组中
                File[] arr = fi.listFiles();
                //遍历数组
                for (File file2 : arr) {
                        //判断是文件还是文件夹,是文件直接复制,是文件夹就直接递归调用
                        if(file2.isFile()){
                                //创建字节缓冲流读写文件
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file2));
                                BufferedOutputStream bos = new BufferedOutputStream(
                                                new FileOutputStream(new File(dir,file2.getName())));
                                int b ;
                                while((b = bis.read())!= -1){
                                        bos.write(b);
                                }
                                //关流
                                bis.close();
                                bos.close();
                        }else{
                                copy(file2,dir);
                        }
                       
                }
        }
}


0 个回复

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