递归加载目录树
实现效果
1 | ├.idea |
首先实现一级目录树
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26// 引入fs、path模块
const fs = require('fs');
const path = require('path');
// 设置目录
var target = path.join(__dirname, process.argv[2] || './');
// 给目录和文件分别设置容器
var dirs = [];
var files = [];
// 使用同步的方法读取目录中的文件和文件夹
var dirInfos = fs.readdirSync(target);
dirInfos.forEach(info => {
//通过stat来判断文件或者文件夹
var stats = fs.statSync(path.join(target, info));
if (stats.isFile()) {
files.push(info);
} else {
dirs.push(info);
}
});
dirs.forEach(dir => {
console.log(`├${dir}`);
});
var count = files.length - 1;
files.forEach(file => {
console.log(`${count--?'├':'└'}─${file}`);
});使用递归
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34// 引入fs、path模块
const fs = require('fs');
const path = require('path');
// 设置目录
var target = path.join(__dirname, process.argv[2] || './');
function load(target, depth) {
// 每递归一次增加一个'│ '
var prefix = new Array(depth).join('│ ');
// 给目录和文件分别设置容器
var dirs = [];
var files = [];
// 使用同步的方法读取目录中的文件和文件夹
var dirInfos = fs.readdirSync(target);
dirInfos.forEach(info => {
//通过stat来判断文件或者文件夹
var stats = fs.statSync(path.join(target, info));
if (stats.isFile()) {
files.push(info);
} else {
dirs.push(info);
}
});
dirs.forEach(dir => {
console.log(`${prefix}├${dir}`);
// 调用自己,直到dirs为空数组时停止调用
load(path.join(target,dir), depth + 1);
});
var count = files.length - 1;
files.forEach(file => {
console.log(`${prefix}${count-- ? '├' : '└'}─${file}`);
});
}
load(target, 0);