欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何使用Java实现复制文件夹的操作

程序员文章站 2024-03-09 10:30:41
...

如何使用Java实现复制文件夹的操作
该操作需要对Java.IO中的字节流有一定的掌握,并且能清晰地使用递归来遍历文件夹。

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.File;

/**
 * Author:Tian90
 */
public class DirectoryCopy {
    public static void main(String[] args) {
        String src = "";//要复制的文件或文件夹路径
        String dest = "";//目标路径
        copy(src,dest);
    }
    public static void copy(String src,String dest){
        File file = new File(src);
        if (!file.exists()){
            throw new RuntimeException("系统找不到指定的文件夹:"+src);
        }
        //初始化IO流
        InputStream is = null;
        OutputStream os = null;
        //判断如果当前文件为文件夹时,在目标目录,新建该文件夹
        if (file.isDirectory()){
            //获取源文件夹的listfiles(包含源文件夹下所有的文件夹与文件)
            File[] files = file.listFiles();
            /**
             * 拼接并创建目标文件夹路径
             * dest:用户想要复制的路径
             * File.separatorChar:等同于"/"
             * file.getName()就是当前文件夹的名字
             */
            String cur_Dest = dest+File.separatorChar+file.getName();

            //获取文件夹对象并创建
            File cur_File = new File(cur_Dest);

            //判断是否创建成功
            if(!cur_File.mkdir()){
                throw new RuntimeException("非法路径,包含未知的文件夹:"+dest);
            }

            for (File temp:files){
                copy(temp.getAbsolutePath(),cur_File.getAbsolutePath());
            }
        }else {
            //如果是文件则创建流并复制
            try{
                is = new FileInputStream(file);
                os = new FileOutputStream(dest+File.separatorChar+file.getName());
                int len = -1;
                byte[] datas = new byte[1024];//缓存为1kb
                while ((len = is.read(datas))!=-1){
                    os.write(datas);
                }
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                //先创建的后释放,后创建的先释放
                try {
                    if(os!=null){
                        os.close();
                    }
                }catch (IOException e){
                    e.printStackTrace();
                }
                try {
                    if(is!=null){
                        is.close();
                    }
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}