zoukankan      html  css  js  c++  java
  • Java删除文件或目录及目录下所有文件

      一直在做C++相关开发的工作。突然某一天一时兴起,想学习下Java开发。然后再网上找到一本Java简明教程,入门是够用了。看到文件IO这一章,想起之前用C++做的删除文件或目录的练习,于是打算用Java来实现这个功能。本以为很简单的功能,还是遇到一些问题。仔细分析下代码,定位到出问题的地方。在此处记录下,提醒自己不会重蹈覆辙。

    1. 第一版的删除函数是这样写的

     1 static boolean delFile(String filename) {
     2         File file = new File(filename);
     3         if (!file.exists()) {
     4             return false;
     5         }
     6 
     7         if (file.isFile()) {
     8             return file.delete();
     9         } else {
    10             String[] filenames = file.list();
    11             for (String f : filenames) {
    12                 delFile(f);
    13             }
    14             return file.delete();
    15         }
    16     }

      代码能编译过,但是运行结果并不符合预期结果。如果在一个大型系统,出现这样的问题,往往是一件很头疼的小事。我的做法是,遇到自己不熟悉的,先自己建一个小工程实现这一功能,添加测试用例。如果测试通过,才会移植到大系统上去。

      经过仔细分析,上面的代码出问题的地方是第10行,file.list()返回的结果是当前路径下的所有文件的文件名,并不包含路径。所以递归调用时,因为检测文件不存在,而返回。然后就有下面这一版。

    2. 正确的删除文件或目录方法

     1 static boolean delFile(File file) {
     2         if (!file.exists()) {
     3             return false;
     4         }
     5 
     6         if (file.isFile()) {
     7             return file.delete();
     8         } else {
     9             File[] files = file.listFiles();
    10             for (File f : files) {
    11                 delFile(f);
    12             }
    13             return file.delete();
    14         }
    15     }

      这版的代码直接以文件对象File为参数,file.listFiles()返回的也是自文件的File对象集合。File对象保存了该文件的具体位置,因此不会出现上一版出现的问题,这一版能正常的工作。

      代码虽然能正常工作,但不是最简洁的版本。下面有一个更为简洁的版本。

    3. 简单并能正常工作的版本

     1 static boolean delFile(File file) {
     2         if (!file.exists()) {
     3             return false;
     4         }
     5 
     6         if (file.isDirectory()) {
     7             File[] files = file.listFiles();
     8             for (File f : files) {
     9                 delFile(f);
    10             }
    11         }
    12         return file.delete();
    13     }

    同样可以正常工作,但是代码没有重复的。

  • 相关阅读:
    [Python图像处理]十.图像的灰度线性变换
    pyecharts实现散点图,词云图,饼状图,直方图
    pyecharts(柱状图)
    [Python图像处理]九.图像形态学相关运算
    如何排查内存泄漏
    如何进行SDK的测试
    分享两个实用的shell脚本实例
    分享一个实用脚本--一键获取linux内存、cpu、磁盘IO等信息
    Linux服务器问题排查思路及常用命令
    工作中最常用的Linux命令,排查问题必备
  • 原文地址:https://www.cnblogs.com/zhugaopeng/p/9416857.html
Copyright © 2011-2022 走看看