zoukankan      html  css  js  c++  java
  • Java实现非递归删除目录


    对比 C# 的文件系统, 发现 C# 的文件系统貌似比 Java 的东西少一点, 居然连删除目录都直接做好封装了, 想到学 Java 的时候还要自己写递归删除, 好像没写过非递归的,就在网上查了下, 关于非递归删除目录代码没几个, 我就写了一个,递归网上一大堆, 就不粘上来了. 下面是代码非递归的方法:

     1 package demo1;
     2 
     3 import java.io.File;
     4 import java.util.ArrayList;
     5 
     6 public class Demo1 {
     7     /**
     8      * 不使用递归删除目录
     9      * @param args
    10      */
    11     public static void main(String[] args) {
    12         deleteDirectory("E:\test");
    13     }
    14     
    15     public static void deleteDirectory(String rootPath) {
    16         //fileList模拟的是一个队列
    17         ArrayList<File> fileList = new ArrayList<File>();//存储文件和直接子目录包含文件的目录
    18         //directoryList模拟的是一个栈
    19         ArrayList<File> directoryList = new ArrayList<File>();//存储直接子目录不包含文件的目录    
    20         File root = new File(rootPath);
    21         if(!root.exists()){
    22             System.out.println("您输入的不是目录");
    23             return;
    24         }
    25         if(root.isFile()){
    26             root.delete();
    27             System.out.println("您输入的是文件,已删除成功");
    28             return;
    29         }
    30         fileList.add(0, root);//第一次入队列
    31         
    32         while(fileList.size() > 0) {
    33             File dir = fileList.remove(0);//模拟一个出队列的过程 【出队列的也许文件,也许是目录】
    34             File[] files = dir.listFiles();
    35             for (int i = 0; i < files.length; i++) {
    36                 if(files[i].isFile()) files[i].delete();//如果是文件就删除
    37                 else fileList.add(files[i]);//模拟一个入队列的过程 【如果是目录就入队列】 
    38             }
    39             directoryList.add(dir);//一次遍历完毕,删除了第一级的文件,模拟一个压栈的过程【压栈的肯定是目录,而且直接子目录不包含文件】
    40         }
    41         //倒序遍历,模拟一个弹粘的过程
    42         for (int i = directoryList.size() - 1; i >= 0; i--) {
    43             directoryList.get(i).delete();
    44         }
    45         if(!root.exists()){
    46             System.out.println("您输入的是文件夹,已刪除成功");
    47         }
    48     }
    49 
    50 }

     其实使用 LinkedList 会更好一点,因为没有查询的过程,只有增删。

  • 相关阅读:
    实训-涉及前端的一些小总结
    实训-mybatis-经验总结2
    实训-mybatis-经验总结
    中软实训笔记
    jsp 中JSTL遇到的报错异常
    mysql的小发现
    Maven笔记
    springmvc-3-拦截器
    springmvc 上传图片
    springmvc
  • 原文地址:https://www.cnblogs.com/daimajun/p/6446131.html
Copyright © 2011-2022 走看看