文件系统 fs
在 Node 中有一个文件系统,可以对计算机中的文件进行增删改查操作。fs 模块是 Node 的核心模块,使用的时候,无需下载,直接引入。
简单文件写
fs.writeFile(file, data[, options], callback)
file
要写入的文件路径 + 文件名data
要写入的数据options
可选参数encoding
设置文件的编码方式,默认为utf8
mode
设置文件的操作权限,默认为0o666
0o111
文件可被执行 (几乎不用)0o222
文件可被写入0o444
文件可被读取
flag
设置对文件执行的操作,默认为w
a
追加w
写入
callback
回调函数
js
// 1. 引入内置的 fs 模块
const fs = require('fs'); // fs.writeFile(file, data, [options], callback)
// 2. 调用 writeFile 方法
fs.writeFile(
__dirname + '/demo.txt',
'一段文本',
{
encoding: utf8,
mode: 0o666, // 设置文件的操作权限
flag: 'w'
},
(err) => {
if (err) {
console.log('文件写入失败', err);
}
else {
console.log('文件写入成功');
}
}
);
流式文件写
fs.createWriteStream(path[, options])
创建可写流
path
要写入的文件路径 + 文件名options
可选参数flags
设置对文件执行的操作,默认为w
encoding
设置文件的编码方式,默认为utf8
mode
设置文件的操作权限,默认为0o666
fd
文件统一标识符autoClose
自动关闭文件,默认为true
emitClose
强制关闭文件,默认为false
start
写入文件的起始位置 (偏移量)
js
// 1. 引入内置的 fs 模块
const fs = require('fs');
// 2. 创建一个可写流
const ws = fs.createWriteStream(
__dirname + '/demo.txt'
);
// 3. 只要用到了流,就必须监测流的状态
ws.on('open', () => {
console.log('可写流打开了');
});
ws.on('close', () => {
console.log('可写流关闭了');
});
// 4. 使用可写流写入数据
ws.write('美女\n');
ws.write('霉女?\n');
ws.write('到底是哪一个?\n');
ws.close(); // 在 Node 的 v8 版本中,要用 end 方法关闭流
简单文件读
fs.readFile(path[, options], callback)
path
要读取文件的路径+文件名+后缀options
可选参数callback
回调函数
js
fs.readFile(
__dirname + '/test.mp4',
(err, data) => {
if (err) {
console.log(err);
}
else {
console.log(data); // 读取出来的东西是 Buffer,因为用户存储的不一定是纯文本
}
});
流式文件读
fs.createReadStream(path[, options])
path
要读取的文件路径 + 文件名options
可选参数flags
设置对文件执行的操作,默认为w
encoding
设置文件的编码方式,默认为utf8
mode
设置文件的操作权限,默认为0o666
fd
文件统一标识符autoClose
自动关闭文件,默认为true
emitClose
强制关闭文件,默认为false
start
写入文件的起始位置 (偏移量)end
highWaterMark
控制每次读取文件的大小,默认值是 64 KB
js
// 1. 引入内置的 fs 模块
const fs = require('fs');
// 2. 创建一个可读流
const rs = fs.createReadStream(
__dirname + '/music.mp3',
{
highWaterMark: 10 * 1024 * 1024, // 10 MB
}
);
// 3. 只要用到了流,就必须监测流的状态
rs.on('open',function () {
console.log('可读流打开了')
});
rs.on('close',function () {
console.log('可读流关闭了')
ws.close() // 关闭可写流
});
// 4. 给可读流绑定 data 事件,触发可读流自动读取文件
rs.on('data', (data) => {
console.log(data); // 很多个 Buffer
console.log(data.length); // 65536 是每个 Buffer 的长度;每次读取 64 KB 的内容
ws.write(data); // 向另一个文件写入读取到的 Buffer
});