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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© taozhihui 中级黑马   /  2016-9-13 01:08  /  1125 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;

public class Test3 {

        /**
         * 需求:3,从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         *
         * 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         * 分析:
         * 1,在目标文件夹中创建原文件夹
         * 2,获取原文件夹中所有的文件和文件夹,存储在File数组中
         * 3,遍历数组
         * 4,如果是文件就用io流读写
         * 5,如果是文件夹就递归调用
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                File src = Test1.getDir();
                File dest = Test1.getDir();
                if(src.equals(dest)) {
                        System.out.println("目标文件夹是源文件夹的子文件夹");
                }else {
                        copy(src,dest);
                }
        }
        /*
         * 把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         * 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,获取原文件夹中所有的文件和文件夹,存储在File数组中
                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);
                                }

4 个回复

倒序浏览
为什么我也这样打,没有把文件夹也copy进去,很奇怪
回复 使用道具 举报
你确定?
回复 使用道具 举报
学长,你好,也是这道题目,帮我看看,这个问题出在哪里,运行时异常说我
Exception in thread "main" java.io.FileNotFoundException: E:\kk (拒绝访问。)

代码是:
package com.haima.bean;

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.util.Scanner;

import javax.imageio.stream.FileImageInputStream;

public class Test3 {

        /**
         * @param args
         * 从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
         * 分析:
         * 1.将键盘录入文件夹路径进行判断file1,file2
         * 2.其中一个文件夹中的内容,进行遍历到字符数组中
         * 3.通过字符数据,获取其的地址值,然后,对每一个数组中的内容,进行拷贝
         * 4,拷贝到目标文件夹中
         * 5.关流
         * @throws IOException
         *
         */
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
               
               
               
                System.out.println("请输入文件来源地址");
                File file1 = getFile();
                System.out.println("请输入文件目标地址");
                File file2 = getFile();
                //System.out.println(file1.getName());
                //System.out.println(file2.getName());
                //System.out.println(file1.getPath());
               
                copyFile(file1,file2);
               
        }
        //1.将键盘录入文件夹路径进行判断
        public static File getFile(){
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入文件夹路径");
                String line = sc.nextLine();
                while(true){
                        File file = new File(line);
                        if(!file.exists()){
                                System.out.println("请重新输入文件路径");
                        }else if(file.isFile()){
                                System.out.println("你输入的是文件路径,请重新输入");
                        }else {
                                return file;
                        }
                }
        }
        public static File copyFile(File file1,File file2) throws IOException{
                File [] subFile1 = file1.listFiles();
                for (File file33 : subFile1) {
                        if(file33.isFile()){
                                BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file33));
                                BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(file2.getPath()));
                                int b;
                                while((b = fis.read()) != -1){
                                        fos.write(b);
                                }
                                fis.close();
                                fos.close();
                        }else if(file33.isDirectory()){
                                return copyFile(file33,file2);
                        }
                }
                return file1;
        }
}

回复 使用道具 举报
来学习来学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马