黑马程序员技术交流社区

标题: 从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中 [打印本页]

作者: cxl1694095035    时间: 2016-5-24 20:22
标题: 从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
package com.heima.test;

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

public class Test1 {
        /*
         *  需求:3,从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         *  
         *  分析
         *  从键盘接收两个文件夹路径
         *  1,创建键盘录入对象
         *  2,定义一个无限循环
         *  3,将键盘录入的对象存储,并封装成File对象
         *  4,对file对象进行判断
         *  5,将文件夹路径返回
         *  
         *  把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         *  1,在目标文件夹中创建原文件夹
         *  2,获取该原文件夹中的所有文件夹和文件listFile
         *  3,遍历数组
         *  4,如果是文件就用Io流读写
         *  5,如果是文件夹就递归调用

         */
        public static void main(String[] args) throws Exception {
                File src = getDir();
                File dest = getDir();
                copy(src,dest);
        }
       
        /* 从键盘接收两个文件夹路径
         * 1,返回值类型File
         * 2,参数列表无
         */
        public static File  getDir() {
                //1,创建键盘录入对象
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个文件夹路径:");
                //2,定义一个无限循环
                while(true) {
                         //3,将键盘录入的对象存储,并封装成File对象
                        String line = sc.nextLine();
                        File dir = new File(line);
                        //4,对file对象进行判断
                        if(!dir.exists()) {
                                System.out.println("您输入的文件夹路径不存在,请从新录入一个文件夹路径:");
                        }else if(dir.isFile()) {
                                System.out.println("您录入的是文件,请从新录入一个文件夹路径:");
                        }else {
                                return dir;
                        }
                }
        }
        /*
         *  把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         *  1,返回值类型void
         *  2,参数列表File src, File dest
         */
        public  static void copy(File src, File dest) throws IOException  {
                //1,在目标文件夹中创建原文件夹
                File newDir = new File( dest, src.getName());
                newDir.mkdir();
                //2,获取该原文件夹中的所有文件夹和文件listFile
                File[] subFiles = src.listFiles();
                //3,遍历数组
                for (File subfile : subFiles) {
                        //4,如果是文件就用Io流读写
                        if(subfile.isFile()) {
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subfile));
                                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(newDir,subfile.getName())));
                                int b;
                                while((b = bis.read()) != -1) {
                                        bos.write(b);
                                }
                                bis.close();                                                               
                                bos.close();
                                // 5,如果是文件夹就递归调用
                        } else {
                        copy(subfile,newDir);
                        }
                }
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2