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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dftgg 中级黑马   /  2014-9-2 14:42  /  1484 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class Demo6 {
/**
* 复制多级文件夹里面的文件和空文件夹
* @param args
* @throws IOException
*/
        static List<File> list = new ArrayList<>(); //定义一个集合存储文件
       
        public static void main(String[] args) throws IOException {
               
                //源路径
                String s = "F:\\test";
                String target = "d:\\test"; //目标路径
                List<File> li = print(s, target);
                copyFile(li, target);
               
        }

        public static List<File> print(String file, String target) throws IOException {
                File desFile = new File(target);
                File srcFile = new File(file);
                if (!desFile.exists()) { //创建空的文件夹
                        desFile.mkdirs();
                }
                File[] ff = srcFile.listFiles();
                if (ff != null) {
                        for (File fl: ff) {
                               
                                if (fl.isFile()) { //是文件类型就加进集合
                                       
                                        list.add(fl);
                                }
                                if (fl.isDirectory()) { //判断是否是文件夹
                                       
                                         print(fl.getPath(), target + File.separator + fl.getName()); //递归调用 判断文件里面是否还有文件夹
                                }
                        }
                }
                return list;
        }
       
        public static void copyFile(List<File> list, String target) throws IOException {
               
                for (File f: list) { //列出集合中的所有文件
                       
                        //获取源文件的路径       
                        String s = f.getAbsolutePath();
                       
                         //把源路径换成给定的路径。   跟据自己所需截取相应的路径
                        String ss = target.concat(s.substring(s.indexOf("\\", s.indexOf("\\")+1 )));
                       
                        //在目标盘中生成对应的文件路径
                        File fi = new File(ss);
                       
                        if (!fi.getParentFile().exists()) { //创建父路径
                                fi.getParentFile().mkdirs();
                        }
                       
                        InputStream in = new FileInputStream(f);
                        OutputStream out = new FileOutputStream(fi);
                       
                        byte[] b = new byte[1024];
                        int len = 0;
                        while ((len = in.read(b)) != -1) {
                                out.write(b, 0, len);  
                        }
                       
                        in.close();
                        out.close();
                }
               
        }
}

1 个回复

倒序浏览
其实我一直都不是很理解为什么要创建集合来存储文件.
我的思路是   先判断传入的目的文件夹存在吗 ,不存在则创建文件夹
                  然后遍历源文件夹, 如果遍历到的是文件夹,就递归.
                  如果是文件,则创建输入输出流,读取文件内容,并且写出到目的文件夹里.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马