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 @ 2023-03-14 09:43  Mars.wang  阅读(123)  评论(0)    收藏  举报