Java复制文件夹或者复制文件

摘要:文件夹不能直接复制,如果是文件夹需要先创建文件夹,然后再复制文件。

import java.io.*;

public class Copy {
    //用于文件夹和文件的复制
    public static void main(String[] args) throws IOException {
        //要复制的文件或文件夹路径
        String src = "E:\\Test1";
        //复制文件或文件夹到目标文件夹下,注意这里复制的可能是文件也可能是文件夹,但是目标一定是文件夹
        String dest = "E:\\test";
        copy(src, dest);
    }
    public static void copy(String src, String dest) throws IOException {
        File file = new File(src);
        if(!file.exists()){
            //可以起到一个抛出异常中断程序的效果
            throw new RuntimeException("找不到指定路径下的文件或文件夹"+src);
        }
        //初始化I/O流
        InputStream in = null;
        OutputStream out = null;
        //如果文件夹是目录,则在指定路径下新建目录,如果是文件则直接复制
        if(file.isDirectory()){
            File[] files = file.listFiles();
            String cur = dest + File.separatorChar + file.getName();
            File file1 = new File(cur);
            if(!file1.mkdir()){
                throw new RuntimeException("非法路径"+dest);
            }
            for(File file2 : files){
                copy(file2.getAbsolutePath(), file1.getAbsolutePath());
            }
        }else{
            in = new FileInputStream(file);
            out = new FileOutputStream(dest + File.separatorChar + file.getName());
            //缓存数组
            byte[] a = new byte[1024];
            int len = -1;
            while((len = in.read(a)) != -1){
                out.write(a);
            }
            //将缓存写入目标文件
            out.flush();
            //先创建先释放,后创建后释放
            out.close();
            in.close();
        }
    }
}

学习:使用throw关键字抛出异常,既可以起到异常提示的作用,还可以起到中断程序的作用。