递归删除文件夹跟拷贝文件夹

删除文件:存在文件则直接删除返回true,如果不存在返回false

删除目录:
   ①:为空:直接删除
   ②:不为空:删不掉 (需要先删除文件夹里面所有文件,再删除文件夹)
   ③:不存在直接返回false
注意:delete方法 ==>直接从磁盘中删除,不能像回收站一样可以恢复!!

 

public static void main(String[] args) throws Exception {
        //源文件路径
        File f1 = new File("F:\\Maven\\smbms");
        //目标文件路径
        File f2 = new File("H:\\Test");

        //调用方法进行拷贝
        folderCopy(f1, f2);
    }

    /**
     * 递归拷贝文件夹
     *
     * @param oldFile 源文件夹
     * @param newFile 目标文件夹
     */
    private static void folderCopy(File oldFile, File newFile) {
        //判断目标文件夹是否存在
        if (!newFile.exists()) {
            newFile.mkdir();
        }
        //获得源文件夹所有子文件
        File[] srcFiles = oldFile.listFiles();
        for (File srcFile : srcFiles) {
            //创建复制目标文件
            File targetFile = new File(newFile.getAbsoluteFile() + "/" + srcFile.getName());
            if (srcFile.isDirectory()) {
                //源文件为文件夹,目标文件创建文件夹
                targetFile.mkdir();
                //递归
                folderCopy(srcFile, targetFile);
            } else {
                //不是文件夹,复制该文件(此处可以抽取为赋值文件方法)
                FileInputStream fis = null;
                FileOutputStream fos = null;
                try {
                    fis = new FileInputStream(srcFile);
                    fos = new FileOutputStream(targetFile);
                    byte[] bytes = new byte[1024];
                    int len = 0;
                    while ((len = fis.read(bytes)) != -1) {
                        fos.write(bytes, 0, len);
                        fos.flush();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    //关闭流
                    if (fos!=null){
                        try {
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (fis!=null){
                        try {
                            fis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }

            }
        }
    }


    /**
     * 递归删除文件夹
     *
     * @param file
     */
    public static void deleteFile(File file) {
        //判断路径是否存在
        if (file.exists()) {
            //测试此抽象路径名表示的文件是否是一个标准文件。
            if (file.isFile()) {
                file.delete();
            } else {//不是文件,对于文件夹的操作
                //返回file路径下所有文件和文件夹的绝对路径
                File[] listFiles = file.listFiles();
                for (File file2 : listFiles) {
                    /*
                     * 递归作用:由外到内先一层一层删除里面的文件 再从最内层 反过来删除文件夹
                     *    注意:此时的文件夹在上一步的操作之后,里面的文件内容已全部删除
                     *         所以每一层的文件夹都是空的  ==》最后就可以直接删除了
                
*/ deleteFile(file2); } } file.delete(); } else { System.out.println("该file路径不存在!!"); } }

 

posted @ 2020-12-25 17:55  Java小白的搬砖路  阅读(193)  评论(0编辑  收藏  举报