黑马程序员技术交流社区

标题: 今天做得一道题感觉挺不错给大家分享下 [打印本页]

作者: 仙风道骨    时间: 2015-12-18 00:42
标题: 今天做得一道题感觉挺不错给大家分享下
package com.heima.demo;
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 Test222 {

        /**
         * 从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                File inputFile = getFile();                //接收用户输入的源文件夹路径
                File outputFile = outFile();        //接收用户输入的目的文件夹路径
                copyFile(inputFile,outputFile);        //调用复制文件夹方法
        }

        //获取用户输入的文件夹
        public static File getFile() {
                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;
                        }
                }
        }
       
        //获取用户输入的目的地文件夹路径
        public static File outFile() {
                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;
                        }
                }
        }
       
        //拷贝一个文件夹到另外一个文件夹
        public static void copyFile(File inputFile,File outputFile) throws IOException {
                File[] inputArr = inputFile.listFiles();        //定义文件数组,接收传入文件夹下所有文件和文件夹的File对象
                for (File file : inputArr) {                                //遍历文件数组
                        if (file.isFile()) {                                        //如果元素是一个文件
                                String fileName = file.getName();        //获取到文件名
                                File copyFile = new File(outputFile,fileName);        //关联输出路径和文件名为File实例
                                copyFile.createNewFile();                        //创建新的文件
                               
                                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
                                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(copyFile));
                               
                                byte[] bys = new byte[1024*8];
                                int len;
                                while ((len = bis.read(bys)) != -1) {        //当读取到的字节不为-1,一直读取
                                        bos.write(bys,0,len);                                        //写数据
                                }
                                bis.close();                                                //关闭输入流
                                bos.close();                                                //关闭输出流
                        }else if (file.listFiles().length == 0) {        //如果是一个空文件夹
                                String fileName = file.getName();                //获取文件夹名
                                File copyEmptyFile = new File(outputFile,fileName);//根据输出路径和空文件夹名创建File实例
                                copyEmptyFile.mkdir();                                        //生成文件夹
                        }else {                                                                                //如果是带内容的文件夹
                                String fileName = file.getName();                //获取文件夹名
                                File copyFiles = new File(outputFile,fileName);//根据输出路径和文件夹名创建File实例
                                copyFiles.mkdir();                                                //生成文件夹
                                copyFile(file,copyFiles);                                //调用自身方法,进行递归
                        }
                }
        }
}
作者: 荆浩_jh    时间: 2015-12-18 00:44
赞一个,这个我还没有搞懂,再研究研究
作者: 仙风道骨    时间: 2015-12-18 22:57
荆浩_jh 发表于 2015-12-18 00:44
赞一个,这个我还没有搞懂,再研究研究

慢慢研究不明白可以问我
作者: hdhunter    时间: 2015-12-19 10:29
copyFile,设计得漂亮。赞一个。
作者: 仙风道骨    时间: 2015-12-19 23:34
hdhunter 发表于 2015-12-19 10:29
copyFile,设计得漂亮。赞一个。

哈哈
作者: 谢光智    时间: 2015-12-20 10:33
待老夫来解他一解。
作者: 仙风道骨    时间: 2015-12-23 00:52
谢光智 发表于 2015-12-20 10:33
待老夫来解他一解。


作者: 744919632    时间: 2015-12-23 01:00
赞赞赞,来学习咯。




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