java中删除文件/文件夹的3种方法示例小结

 更新时间:2023年10月10日 11:41:37   作者:程序修理员  
这篇文章主要介绍了java中删除文件/文件夹的3种方法示例小结,第一种是通过io删除文件,第二种是通过Files.walk删除文件,第三种是通过 Files.walkFileTree删除文件,本文结合示例代码给大家介绍的非常详细,需要的朋友参考下吧

java中删除文件/文件夹的3种方法

1、通过io删除文件

    /**
     * 通过递归逐层删除文件信息
     *
     * @param filePath
     */
    public static void deleteFileByIO(String filePath) {
        File file = new File(filePath);
        File[] list = file.listFiles();
        if (list != null) {
            for (File temp : list) {
                deleteFileByIO(temp.getAbsolutePath());
            }
        }
        file.delete();
    }

2、通过Files.walk删除文件

    /**
     * 使用Files.walk遍历文件夹(包含子文件夹及子其文件),遍历结果是一个Stream
     * 对每一个遍历出来的结果进行处理,调用Files.delete就可以了。
     *
     * @param filePath
     * @throws IOException
     */
    public static void deleteFileByStream(String filePath) throws IOException {
        Path path = Paths.get(filePath);
        try (Stream<Path> walk = Files.walk(path)) {
            walk.sorted(Comparator.reverseOrder())
                    .forEach(FileUtil::deleteDirectoryStream);
            // FileUtil为类名
        }
    }
    private static void deleteDirectoryStream(Path path) {
        try {
            Files.delete(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3、通过 Files.walkFileTree删除文件

 /**
     * 使用walkFileTree方法遍历整个文件目录树,使用FileVisitor处理遍历出来的每一项文件或文件夹
     * FileVisitor的visitFile方法用来处理遍历结果中的“文件”,所以我们可以在这个方法里面删除文件
     * @param filePath
     * @throws IOException
     */
    public static void deleteFileByWalkFileTree(String filePath) throws IOException {
        Path path = Paths.get(filePath);
        Files.walkFileTree(path,
                new SimpleFileVisitor<Path>() {
                    // 先去遍历删除文件
                    @Override
                    public FileVisitResult visitFile(Path file,
                                                     BasicFileAttributes attrs) throws IOException {
                        Files.delete(file);
                        System.out.printf("文件被删除 : %s%n", file);
                        return FileVisitResult.CONTINUE;
                    }
                    // 再去遍历删除目录
                    @Override
                    public FileVisitResult postVisitDirectory(Path dir,
                                                              IOException exc) throws IOException {
                        Files.delete(dir);
                        System.out.printf("文件夹被删除: %s%n", dir);
                        return FileVisitResult.CONTINUE;
                    }
                }
        );
    }

扩展:

java删除文件或目录的三种方法

一、所用工具

传统删除是利用IO流,本文利用NIO流实现。

二、常见几种方法

1.传统IO流

代码如下(示例):

//调用
 File file = new File("E:/河南省乡镇点/GIS/");
 deleteFile(file);
//删除文件夹及其文件
    public static void deleteFile(File file){
        //获取目录下子文件
        File[] files = file.listFiles();
        //遍历该目录下的文件对象
        for (File f : files) {
            //打印文件名
            System.out.println("文件名:" + f.getName());
            //文件删除
            f.delete();
        }
        boolean delete = file.delete();
        System.out.println(delete);
    }

2.强制删除(如若一次删除失败,进行多次强制删除即可)

代码如下(示例):

//调用
 File file = new File("E:/河南省乡镇点/GIS/");
 forceDelete(file);
//强制删除
    public static boolean forceDelete(File file) {
        boolean result = file.delete();
        int tryCount = 0;
        while (!result && tryCount++ < 10) {
            System.gc(); //回收资源
            result = file.delete();
        }
        return result;
    }

3.利用NIO流

代码如下(示例):

 Path path= Paths.get("E:\\河南省乡镇点\\GIS");
        Files.walkFileTree(path,new SimpleFileVisitor<>(){
            //遍历删除文件
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Files.delete(file);
                return FileVisitResult.CONTINUE;
            }
            //遍历删除目录
            public FileVisitResult postVisitDirectory(Path dir,IOException exc) throws IOException{
                Files.delete(dir);
                return FileVisitResult.CONTINUE;
            }
        });

总结

利用NIO流的好处:
1.如果删除失败,可以给出错误的具体原因;
2.代码不多,效率高。

到此这篇关于java中删除文件/文件夹的3种方法的文章就介绍到这了,更多相关java删除文件/文件夹内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring拦截器实现鉴权的示例代码

    Spring拦截器实现鉴权的示例代码

    本文主要介绍了Spring拦截器实现鉴权的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 手动编译并运行Java项目实现过程解析

    手动编译并运行Java项目实现过程解析

    这篇文章主要介绍了手动编译并运行Java项目实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java线程的6种状态及切换教程

    Java线程的6种状态及切换教程

    这篇文章主要给大家介绍了关于Java线程的6种状态及切换教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 解决idea爆红 cant resolve symbol String的问题解析

    解决idea爆红 cant resolve symbol String的问题解析

    连着出差几个礼拜没有使用idea开发工具,突然一天打开电脑发现idea里的代码全部爆红,懵逼不如所措,很多朋友建议我按住Alt+回车设置jdk就能解决,但是仍然报错,经过几个小时的倒腾最终解决,遇到此问题的朋友参考下本文吧
    2021-06-06
  • java分割字符串多种方法(附例子)

    java分割字符串多种方法(附例子)

    这篇文章主要给大家介绍了关于java分割字符串多种方法的相关资料,Java中有多种方法可以实现字符串分割,文中将每张方法都给出了代码示例,需要的朋友可以参考下
    2023-10-10
  • 详谈java中int和Integer的区别及自动装箱和自动拆箱

    详谈java中int和Integer的区别及自动装箱和自动拆箱

    这篇文章主要介绍了详谈java中int和Integer的区别及自动装箱和自动拆箱,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 详解spring boot中使用JdbcTemplate

    详解spring boot中使用JdbcTemplate

    JdbcTemplate 是在JDBC API基础上提供了更抽象的封装,并提供了基于方法注解的事务管理能力。 通过使用SpringBoot自动配置功能并代替我们自动配置beans,下面给大家介绍spring boot中使用JdbcTemplate相关知识,一起看看吧
    2017-04-04
  • Java反射如何有效的修改final属性值详解

    Java反射如何有效的修改final属性值详解

    最近在工作中遇到一个需求,要利用反射对修饰符为final的成员变量进行修改,所以这篇文章主要给大家介绍了关于Java反射如何有效的修改final属性值的相关资料,文中通过示例代码介绍的非常详细,对需要的朋友可以参考下。
    2017-08-08
  • 深入理解Spring事务的传播行为

    深入理解Spring事务的传播行为

    Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。下面这篇文章主要给大家介绍了关于Spring事务传播行为的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • java8升级java21方法步骤(完整pom文件升级及代码修改)

    java8升级java21方法步骤(完整pom文件升级及代码修改)

    在从Java 8升级至Java 211的过程中,需要对多个POM文件进行升级,涉及parent、web、service等模块,文中通过代码介绍的非常详细,对大家学习或者使用java具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-11-11

最新评论