03-文件系统

nobility 发布于 2021-01-16 1905 次阅读


文件系统

缓冲区

全局模块,作用于输入输出流的数据

静态方法

方法名 描述
Buffer.from(obj) 将数组、对象、字符串等转化为Buffer对象
Buffer.alloc(size) 创建指定大小的Buffer对象
Buffer.allocUnsafe(size) 创建指定大小的Buffer对象,不会清空内容数据,可能包含敏感数据

实例属性和方法

方法名 描述
Buffer.prototype.toString([encoding]) 将Buffer对象转化为字符串,可指定字符编码
Buffer.prototype.slice([start,end]) 截取Buffer对象
Buffer.prototype.fill(value) 填充Buffer对象
Buffer.prototype.length Buffer对象的长度

简单操作

文件操作

方法名 描述 回调函数 回调函数描述
fs.writeFile(file,data,callback) 创建并覆盖写文件 callback(err) 覆盖写入文件后的回调
fs.appendFile(file,data,callback) 创建并追加写文件 callback(err) 追加写入文件后的回调
fs.readFile(path,callback) 读取文件 callback(err,data) data是读到的数据(是Buffer对象)
fs.unlike(path,callback) 删除文件 callback(err) 删除文件后的回调

目录操作

方法名 描述 回调函数 回调函数描述
fs.mkdir(path,callback) 创建目录 callback(err) 创建目录后的回调
fs.readdir(path,callback) 读取目录 callback(err,files) files 是目录中文件的名称的数组(不包括 ./../
fs.rmdir(path,callback) 删除空目录 callback(err) 删除目录后的回调

其他操作

方法名 描述
fs.existsSync(path) 同步判断路径下的文件或目录是否存在
fs.rename(oldPath,newPath,callback) 移动文件或目录,可用于重命名,callback(err)为移动后的回调
fs.truncate(path,callback) 截断文件(快速清空),callback(err)是截断后的回调
fs.watchFile(filename,listener) 监听文件变化(默认5007ms检测一次),若变化会调用listener(current,previous)函数,参数都为文件统计对象,分别代表变化前后的统计信息
fs.stat(path,callback) 文件统计信息,callback(err,stats)stats为统计对象

stats对象

方法或属性 描述
stats.isDirectory() 是否是目录
stats.isFile() 是否是普通文件
stats.size 文件大小

流操作

方法名 描述
fs.createReadStream(path) 创建读入流对象
fs.createWriteStream(path[,options]) 创建写入流对象,options对象可定义一些选项,比如{flags:"a"}代表追加流

读入流

继承stream.Readable

方法名 描述
readable.pipe(writable) 将读入流读到的内容写到写入流

由于读入流是分批次读取数据的,所以必须监听事件

事件名 描述 回到函数 描述
data 流中将数据块传送给消费者后触发 callback(chunk) chunk就是读到的数据
end 流中没有数据可供消费时触发 callback()

写入流

继承stream.Writable

方法名 描述
writable.write(chunk[,callback]) 向写入流中写数据,callback()是写入成功的回调
writable.end([chunk,callback]) 最后的写入,表示没有数据要写入了

逐行读取流

事件

事件名 描述 回调函数 描述
line 每读取一行触发 callback(lineData) lineData就是该行数据
close 读取完最后一行时触 callback()

使用方式

多用日志分析

const fs = require("fs");
const path = require("path");
const readline = require("readline");
const logFile = path.join(__dirname, "log", "access.log");  //日志文件路径
const logStream = fs.createReadStream(logFile);  //日志读入流
const rl = readline.createInterface({ //创建逐行读取实例
  input: logStream	//指定文件输入流
});

rl.on("line", (lineData) => { //监听line事件
  console.log(lineData);  //分析逻辑
})
rl.on("close", () => {  //监听close事件
  console.log("读取完毕");
})
此作者没有提供个人介绍
最后更新于 2021-01-16