Node的部分API

生成文件树

下方是生成一个文件树的api及代码

  1. os.EOL为操作系统的行尾标记📌

    • POSIX 上是 \n
    • Windows 上是 \r\n
  2. __dirname是当前运行文件的目录名(绝对目录)

    // 从 /Users/mjr 运行 node example.js
    console.log(__dirname);
    // 打印: /Users/mjr
    
  3. fs.appendFileSync同步地将数据追加到文件中,如果文件尚不存在则创建该文件。appendFileSyncopen in new window 其中有三个参数 path、data、[options]

    • 第三个参数为字符串的时候为编码格式
    • 如果我们第一个参数用了fs.open(),记得将其关闭
    import { openSync, closeSync, appendFileSync } from 'fs';
    let fd;
    try {
       fd = openSync('message.txt', 'a');
       appendFileSync(fd, 'data to append', 'utf8');
    } catch (err) {
    /* 处理错误 */
    } finally {
    if (fd !== undefined)
       closeSync(fd);
    }
    
  4. path.join()接收多个字符串参数,使用特定于平台的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。

    • 其中零长度的 path 片段被忽略。 如果连接的路径字符串是零长度字符串,则将返回 '.',表示当前工作目录。
  5. fs.readdirSync()读取目录的内容。

  6. fs.statSync返回一个fs.Stats

    1. fs.stat()fs.lstat()fs.fstat() 及其同步方法返回的对象属于此类型。
    2. stats.isFile()判断是不是文件
const fileName = 'filetree.txt'
const fs = require('fs');
const path = require('path');
const os = require("os");
// 目标地址相对现在的位置 target为绝对目录
let target = path.join(__dirname, './src');
//目标目录
function loadTree(target, deep) {
    let prev = new Array(deep).join(' |');
    // 前面| 字符串
    let dirinfo = fs.readdirSync(target);
    //保存文件或者是文件夹
    let files = [];
    let dirs = [];
    //遍历将文件或者文件夹分开存储
    for (let i = 0; i < dirinfo.length; i++) {
        let state = fs.statSync(path.join(target, dirinfo[i]));
        if (state.isFile()) {
            files.push(dirinfo[i])
        } else {
            dirs.push(dirinfo[i])
        }
    }
    // 文件夹操作
    for (let i = 0; i < dirs.length; i++) {
        // 同步写入数据(文件夹)到文件
        fs.appendFileSync(fileName, `${prev} ├─ ${dirs[i]}` + os.EOL)
        // 递归
        let nextPath = path.join(target, dirs[i])
        let nextdeep = deep + 1;
        // 下一级的 文件目录 以及层级
        loadTree(nextPath, nextdeep)
        // 递归调用
    }
    // 文件操作
    for (let i = files.length - 1; i >= 0; i--) {
        let tree1 = ''
        if (i === 0) {
            tree1 = `${prev} └─  ${files[i]}` + os.EOL
        } else {
            tree1 = `${prev} ├─   ${files[i]}` + os.EOL
        }
        // 同步写入数据到文件
        fs.appendFileSync(fileName, tree1)
    }
}

loadTree(target, 1);
Last Updated: