实现效果
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
├.idea
│ ├markdown-navigator
│ │ └─profiles_settings.xml
│ ├─encodings.xml
│ └─workspace.xml
├module
│ ├─calculator.js
│ └─father.js
├node_modules
│ ├iconv-lite
│ │ ├encodings
│ │ │ ├tables
│ │ │ │ ├─big5-added.json
│ │ │ │ └─shiftjis.json
│ │ │ ├─dbcs-codec.js
│ │ │ └─utf7.js
│ │ ├lib
│ │ │ ├─bom-handling.js
│ │ │ └─streams.js
│ │ ├─.npmignore
│ │ └─README.md
├test
│ ├module
│ │ ├─index.js
│ │ └─package.json
│ └─inde.js
├─list.md
└─write1.js
  1. 首先实现一级目录树

    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}`);
    });
  2. 使用递归

    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);