java 实现linux tree,Java 递归遍历实现linux tree命令

看到介绍java file类的文章,有一个遍历文件夹的练习,遍历某个目录下所有文件,包括子目录。写了一个用栈实现的递归遍历。

import java.io.File;

import java.util.Stack;

public class TraversalFile {

public static void main(String[] args) {

File dir = new File("D:/Study/code/Java/TraversalFile");

traversal(dir,1);

}

public TraversalFile() {

// TODO Auto-generated constructor stub

}

public static void traversal(File file,int depth) {

printName(file, depth);

File[] fileArray = file.listFiles();

Stackstack = new Stack();

for(File f:fileArray) {

if(f.isFile()) {

printName(f, depth + 1);

}

else {

stack.add(f);

}

}

while(stack.isEmpty() == false) {

traversal(stack.pop(),depth + 1);

}

}

public static void printName(File f, int signNum) {

StringBuilder builder = new StringBuilder();

//signNum个sign

for(int i=0;i

效果如下

7498ed0f1536ac467ed7df17885ac393.png

递归调用的函数traversal

public static void traversal(File file,int depth) {

printName(file, depth);

File[] fileArray = file.listFiles();

Stackstack = new Stack();

for(File f:fileArray) {

if(f.isFile()) {

printName(f, depth + 1);

}

else {

stack.add(f);

}

}

while(stack.isEmpty() == false) {

traversal(stack.pop(),depth + 1);

}

}

函数首先调用了一个printName函数,用来打印当前传入文件的名字,包括前面的线条,然后遍历当前文件的子文件,如果是文件类型就打印出来,但是深度+1,深度是用来通过打印字符显示出文件层次的,如果是目录就入栈。遍历结束后就出栈并递归调用 traversal,直到所有文件打印完毕。

不使用stack也可以实现遍历,但是fileArray里面可能文件和目录是混着的,显示出来会比较乱,如果先打印文件,目录都入栈,之后处理,就可以区别开。

如果不考虑文件和目录是混着输出,下面这种写法更简洁。

如果是文件就返回,是目录就递归调用。

public static void traversal(File file,int depth) {

printName(file, depth);

if (file.isFile())

return;

File[] fileArray = file.listFiles();

for(File f:fileArray) {

traversal(f, depth + 1);

}

}

结果如下

c97ba4d013026c5a160bfec1df181539.png

printName函数

public static void printName(File f, int signNum) {

StringBuilder builder = new StringBuilder();

//signNum个sign

for(int i=0;i

文件或目录名前根据层级填充空格,最后用 |--紧接名字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值