Node的部分API
生成文件树
下方是生成一个文件树的api及代码
os.EOL
为操作系统的行尾标记📌- POSIX 上是
\n
- Windows 上是
\r\n
- POSIX 上是
__dirname
是当前运行文件的目录名(绝对目录)// 从 /Users/mjr 运行 node example.js console.log(__dirname); // 打印: /Users/mjr
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); }
path.join()
接收多个字符串参数,使用特定于平台的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。- 其中零长度的 path 片段被忽略。 如果连接的路径字符串是零长度字符串,则将返回 '.',表示当前工作目录。
fs.readdirSync()
读取目录的内容。fs.statSync
返回一个fs.Stats类- 从
fs.stat()
、fs.lstat()
和fs.fstat()
及其同步方法返回的对象属于此类型。 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);