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


    删除文件:存在文件则直接删除返回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路径不存在!!"); } }
  • 相关阅读:
    4header组件开发
    3组件骨架开发
    2项目目录设计
    1项目相关的一些简介
    21AJax与Comet
    20JSON
    获取特定筛选条件下数据的四分位点
    动态长度字符串的解析拆分问题
    myBase Desktop 7无限免费试用方法
    VBA 将Excel工作簿中所有表格进行一键排版
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14190192.html
Copyright © 2020-2023  润新知