将任意文件复制到一个目录下的所有子目录中

package com.itheima;

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

public class TestCopy {
    public static void main(String[] args) throws IOException {
        //1.获取文件夹路径File对象  (G:\test\src)目标文件存放位置
        File srcdir = new File("G:\\test\\src");
        File[] files = srcdir.listFiles();
        for (File file : files) {
            //获取目标文件
            String srcPath = file.getAbsolutePath(); //G:\test\src\aaa.txt
            //2.获取目录名称
            File targetfile = new File("G:\\test\\target");
            //2.1提供一个集合
            List filesPathList = new ArrayList();
            //2.2获取所有目录对象,封装入集合中
            getFilesPath(targetfile,filesPathList);//[G:\test\target, G:\test\target\aaa, G:\test\target\abc, G:\test\target\abc\d]
            //3.复制文件
            //3.1遍历集合
            for (File targetFile : filesPathList) {
                //转化
                String absolutePath = targetFile.getAbsolutePath();//G:\test\target
                //拼接复制位置文件名称
                String targetpath = absolutePath+"\\"+file.getName(); //G:\test\target +"\"+aaa.txt
                copy(srcPath,targetpath);
            }
        }


    }

    /**
     * 递归查找目标File对象下的所有目录File对象
     *
     * @param targetfile      目标目录File对象
     * @param targetFileslist 目标目录File对象 下的所有目录
     * @return
     */
    public static void getFilesPath(File targetfile, List targetFileslist) {
        //添加自身
        targetFileslist.add(targetfile);
        //获取目标目录下的所有文件和目录
        File[] files = targetfile.listFiles();
        //遍历文件找到目录
        for (File file : files) {
            //判断对象是目录File对象
            if (file.isDirectory()) {
                //如果是目录,则对用方法
                getFilesPath(file, targetFileslist);
            }
        }
    }

    /**
     *
     * @param srcPath//原始文件的路径
     * @param destPath//目标文件路径
     * @throws IOException
     */
    public static void copy(String srcPath,String destPath) throws IOException {
        //[1]创建对象
        FileInputStream fis = new FileInputStream(srcPath);
        FileOutputStream fos = new FileOutputStream(destPath);
        //[2]读写数据
        int ch;
        while((ch = fis.read())!=-1){
            fos.write(ch);
        }
        //[3]释放资源
        fis.close();
        fos.close();
    }
}

你可能感兴趣的:(java)