文档章节

非递归方法实现对TB级文件目录的全遍历

陶邦仁
 陶邦仁
发布于 2012/11/16 23:02
字数 239
阅读 267
收藏 7

递归的方法,在递归数量过大的时候,会导致堆栈溢出错误。用非递归方法,可以实现。

package com.taoxg.test;

import java.io.*;
import java.util.LinkedList;
public class LoopDir {
public static void main(String[] args) {
  long count=0;
  long countd=0;
  //链表
  LinkedList<File> list = new LinkedList<File>();
  File dir = new File("D://");
  File[] file = dir.listFiles();
  for (int i = 0; i < file.length; i++) {
   if (file[i].isDirectory())
    //把第一层的目录,全部放入链表
    list.add(file[i]);
   else
    count++;
    System.out.println("文件"+count + ":" + file[i].getAbsolutePath());
  }
  File tmp=null;
  //循环遍历链表
  while (!list.isEmpty()) {
   //把链表的第一个记录删除
   tmp = list.removeFirst();
   //如果删除的目录是一个路径的话
   if (tmp.isDirectory()) {
    //列出这个目录下的文件到数组中
    file = tmp.listFiles();
    if (file == null)
     continue;
    //遍历文件数组
    for (int i = 0; i < file.length; i++) {
     if (file[i].isDirectory())
      //如果遍历到的是目录,则继续加入链表
      list.add(file[i]);
     else
     count++;
     System.out.println("文件"+count + ":" + file[i].getAbsolutePath());
    }
   } else {
    countd++;
    System.out.println("目录["+countd+"]路径:" +tmp.getAbsolutePath());
   }
  }
}
}

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1612
博文 420
码字总数 1483887
作品 0
海淀
技术主管
Node中的两种遍历方式-深度优先和广度优先(附Node删除文件例子进行详解)

树的基本概念 树(Tree)是 个结点的有限集, 为 时,称为空树,在任意一棵非空树中有且仅有一个特定的被称为根(Root)的结点,当 大于 时,其余结点可分为 个互不相交的有限集 、、、,其中...

09/14
0
0
二叉树递归和非递归遍历

二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就 是递归定义,因...

种地瓜
2016/08/03
34
0
这都不会,还学什么Python?利用栈和队列模拟递归

下面从一个尽量贴近一个初学者的角度,给大家细致入微的了解一下Python中的递归。 一,递归递归调用:一个函数,调用的自身,称为递归调用递归函数:一个可以调用自身的函数称为递归函数  ...

无也Python
10/19
0
0
Linux下的C++程序:统计一个目录及其内部文件总共占据的空间大小

统计一个目录的大小(byte数),最简单的办法是在控制台输入命令: du -sb 目录地址 用C++实现这个功能,是通过递归遍历目录下的文件和子目录达到的。需要注意的是,因为Byte数过大,单用一个...

北风其凉
2014/10/14
0
3
java中常见的递归使用场景

一、递归概述 程序调用自身的编程技巧称为递归.递归作为一种算法在程序设计语言中广泛应用。 递归需具备的条件: 子问题须与原始问题为同样的事,且更为简单; 不能无限制调用本身,须有个出...

lkee6760
2017/02/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
47
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
41
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
45
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
40
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部