递归输出 树状 目录

 1 import java.io.File;
 2 import java.util.ArrayList;
 3 import java.util.List;
 4
 5 public class IteratorDirDemo {
 6
 7     public static void main(String[] args) {
 8         IteratorUtil.IteratorDir(new File("f:\\KuGou"));
 9     }
10
11 }
12
13 class IteratorUtil {
14     private static int level = 0;// 保存层级数
15
16     public static void IteratorDir(File file) {
17         if (file != null) {
18             // 找出递归的出口
19             if (file.isFile() || file.list().length == 0) {
20                 return;
21             } else {
22
23                 File[] files = file.listFiles();
24                 //线文件夹后文件排序
25                 files = sort(files);
26                 for (File f : files) {
27                     // 动态字符串
28                     StringBuilder sb = new StringBuilder();
29                     if (f.isFile()) {
30                         sb.append(getTab(level));
31                         sb.append(f.getName());
32                     } else {
33                         sb.append(getTab(level));
34                         sb.append(f.getName());
35                         sb.append("\\");
36                     }
37                     System.out.println(sb.toString());
38                     if (f.isDirectory()) {
39                         level++;// 进入目录遍历层级加一
40                         IteratorDir(f);// 递归调用遍历
41                         level--;// 退出目录 level减一
42                     }
43
44                 }
45             }
46
47         }
48     }
49
50     /**
51      * 对file类型数组进行先文件夹后文件排序
52      *
53      * @param files
54      * @return
55      */
56     private static File[] sort(File[] files) {
57         List<File> list = new ArrayList<File>();
58         // 先存放文件夹后存放文件
59         for (File f :files) {
60             if (f.isDirectory()) {
61                 list.add(f);
62             }
63         }
64         for (File f : files) {
65             if (f.isFile()) {
66                 list.add(f);
67             }
68         }
69         return list.toArray(new File[list.size()]);
70
71     }
72
73     // 根据层级数得到\t所组成的字符串
74     private static String getTab(int level) {
75         StringBuilder sb = new StringBuilder();
76         for (int i = 0; i < level; i++) {
77             sb.append("\t");
78         }
79         return sb.toString();
80     }
81 }
时间: 2024-10-14 12:55:22

递归输出 树状 目录的相关文章

lua 如何输出树状结构的table?

为了让游戏前端数据输出更加条理,做了一个简单树状结构来打印数据. ccmlog.lua local function __tostring(value, indent, vmap) local str = '' indent = indent or '' vmap = vmap or {} --递归结束条件 if (type(value) ~= 'table') then if (type(value) == 'string') then --字符串 str = string.format("[

Linux 目录详解 树状目录结构图

1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/usr/bin类似. /boot/ 引导程序文件,例如:kernel.initrd:时常是一个单独的分区[6] /dev/ 必要设备, 例如:, /dev/null. /etc/ 特定主机,系统范围内的配置文件. 关于这个名称目前有争议.在贝尔实验室关于UNIX实现文档的早期版本中,/etc 被称为

Vim树状目录插件NERDTree安装和使用

安装过程: cd ~ mkdir nerdtree cd nerdtree wget http://www.vim.org/scripts/download_script.php?src_id=17123 -O nerdtree.zip unzip nerdtree.zip mkdir -p ~/.vim/{plugin,doc} cp plugin/NERD_tree.vim ~/.vim/plugin/ cp doc/NERD_tree.txt ~/.vim/doc/ vim ~/.vimr

树状目录+无穷阶层

平时看到数据库动态产生阶层菜单,产生方式有下方两项: 使用TreeView + xml产生 使用 ul 与 li ,运用递归的逻辑:搭配CSS+JavaScript 来设计 最近学到的这个阶层菜单写法,运用上比较简单,以下开始说明做法 前言: 第一篇程序文章终于生出来了. 平时看到的数据库动态产生阶层菜单,产生方式有下方两项: 使用TreeView + xml产生 使用 与 ,运用递归的逻辑:搭配CSS+JavaScript 来设计 可以参考 91大的?MenuMatic + [ASP.NET]

lua 怎样输出树状结构的table?

为了让游戏前端数据输出更加条理,做了一个简单树状结构来打印数据. ccmlog.lua local function __tostring(value, indent, vmap) local str = '' indent = indent or '' vmap = vmap or {} --递归结束条件 if (type(value) ~= 'table') then if (type(value) == 'string') then --字符串 str = string.format("[

c# 递归、树状结构

1.树状结构 treeView.Nodes.Clear(); TreeNode tree = new TreeNode(); tree.Text = "字母"; treeView.Nodes.Add(tree); // tree.Nodes.Add("A"); TreeNode tree1 = new TreeNode(); tree1.Text = "汉字"; treeView.Nodes.Add(tree1); TreeNode a = ne

hdu 3887 Counting Offspring(DFS序【非递归】+树状数组)

题意: N个点形成一棵树.给出根结点P还有树结构的信息. 输出每个点的F[i].F[i]:以i为根的所有子结点中编号比i小的数的个数. 0<n<=10^5 思路: 方法一:直接DFS,进入结点x时记录一下比x小的数的个数.出来x时记录一下比x小的数的个数.相减就是F[x].结合树状数组. 方法二:写下DFS序.对DFS序列建线段树.然后从小到大对结点进行插入.用线段树统计. 代码:(方法一) int const N=1e5+5; int n,p; vector<int> G[N];

14)显示树状目录

1)接着之前的代码 2)最终结果展示: 3)基本步骤: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 // CTree 消息处理程序 2 void CTree::InsertOnePage(HTREEITEM hitem,CString cpath) 3 { 4 5 if(hitem==0||cpath==L"") 6 { 7 return ; 8 } 9 CFileFind cfile; 10 BOOL flag=

设计模式-Composite(结构型模式) 用于 递归构建 树 状 的组合结构,与Decorator的区别是 Composite旨在通过构造子类而添加新操作,而Decorator直接添加新操作。

以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Component.h #pragma once class Component { public: Component(); virtual ~Component(); virtual void Operation() = 0; virtual void Add(const Component&); virtual void Remove(const Component&); virtual Component