java递归复制一个目录

Files有一个方法walk方法,可以递归遍历这个目录下所有目录和文件

利用这个方法,可以将一个文件夹,递归复制到另一个文件夹

复制代码
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @Author : wangbin
 * @Date : 2023/3/14 8:45
 * @Description:
 */
public class File {
    public static void main(String[] args) throws IOException {

        Path source = Paths.get("C:\\Users\\G007112\\Desktop\\msg");
        Path target = Paths.get("C:\\Users\\G007112\\Desktop\\msg2");

        Files.walk(source).forEach(p->{
            try {
                //relative=p相对于source的相对路径
                Path relative = source.relativize(p);
                //q=target+relative
                Path q = target.resolve(relative);
                if(Files.isDirectory(p)){
                    //创建目录
                    Files.createDirectory(q);
                }else{
                    //创建文件并复制
                    Files.copy(p,q);
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });


    }
}
复制代码

 使用FileChannel复制一个文件

复制代码
public class File {
    public static void main(String[] args) throws IOException {

        Path source = Paths.get("C:\\Users\\G007112\\Desktop\\msg\\test.txt");
        Path target = Paths.get("C:\\Users\\G007112\\Desktop\\msg\\test3.txt");
        FileChannel readerChannel = FileChannel.open(source, StandardOpenOption.READ);
        Files.createFile(target);
        FileChannel writerChannel = FileChannel.open(target, StandardOpenOption.WRITE);
        ByteBuffer buffer = ByteBuffer.allocate(32);
        while (readerChannel.read(buffer) != -1) {
            buffer.flip();
            writerChannel.write(buffer);
            buffer.clear();
        }
        readerChannel.close();
        writerChannel.close();
        
    }
}
复制代码

 

posted @   Mars.wang  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2017-03-14 python之datetime
2017-03-14 python正则表达式模块
点击右上角即可分享
微信分享提示