文件系统
缓冲区
全局模块,作用于输入输出流的数据
静态方法
方法名 |
描述 |
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) => {
console.log(lineData);
})
rl.on("close", () => {
console.log("读取完毕");
})
Comments NOTHING