fs 读写文件
fs.opensync(path[]) sync是同步 async是异步
fs是nodejs核心模块,需要引入才能使用
同步写入文件:分为3步
打开文件
- fs.openSync(path[, flags, mode]) []代表可选值
- path 文件路径
- flags 可选值,一定有默认值 'r' 要对文件进行的操作 w是写入
- mode 可选值,一定有默认值 0o666 设置文件的操作权限
- 0o666 可读可写
- 0o111 文件可执行
- 0o222 文件可写入
- 0o444 文件可读取
fs的返回值:表示文件描述符的整数。
写入文件
- fs.writeSync(fd, string[, position[, encoding]])
- fd 文件描述符的整数
- string 写入的内容
- position 从哪个位置开始 0
- encoding 编码方式 utf-8
- 返回值:写入的字节数
关闭文件
- fs.closeSync(fd)
// 引入fs
const fs = require('fs');
// 打开文件
const fd = fs.openSync('./a.txt', 'a');
console.log(fd);
// 写入文件
const byte = fs.writeSync(fd, '111今天天气真晴朗~');
console.log(byte);
// 关闭文件
fs.closeSync(fd);
异步写入文件
打开文件
- fs.open(path[, flags[, mode]], callback)
- callback
- err 错误对象:如果方法出错了,值就是错误对象,如果方法没有出错,就是null
- 错误优先机制:要求开发者写异步代码优先处理错误
- callback
写入文件
- fs.write(fd, string[, position[, encoding]], callback)
关闭文件
- fs.close(fd, callback)
使用async +promise 避免回调地狱
const fs = require('fs');
fs.open('./b.txt', 'w', (err, fd) => {
// 判断方法有无错误
if (err) {
// 出错了~
console.log('open方法出错了: ', err);
} else {
// 没有出错
fs.write(fd, '锄禾日当午', (err) => {
if (err) {
console.log('write方法出错了:', err);
} else {
}
// 不管写入成功或者失败,都要关闭文件
fs.close(fd, (err) => {
if (err) {
console.log('write方法出错了:', err);
} else {
}
})
})
}
});
//这个是避免回调嵌套
(async () => {
// 打开文件
const fd = await new Promise((resolve, reject) => {
// 执行异步操作
fs.open('c.txt', 'w', (err, fd) => {
if (!err) {
// 将promise对象改为成功状态
resolve(fd);
} else {
// 将promise对象改为失败状态
reject(err);
}
})
});
// 写入文件
await new Promise((resolve, reject) => {
fs.write(fd, '汗滴禾下土', (err) => {
if (!err) {
resolve();
} else {
// 打印错误信息
console.error(err);
resolve(err);
}
})
});
// 关闭文件
await new Promise((resolve, reject) => {
fs.close(fd, (err) => {
if (!err) resolve();
else reject(err);
})
})
})();
简单写法
fs.writeFile(file, data[, options], callback) data写入的数据
fs.writeFile('d.txt', '窗前明月光', (err) => {
if (!err) {
console.log('文件写入成功~');
} else {
console.log(err);
}
});
简单读取文件
- fs.readFile(path,callpack)
- callpack
- err
- data 读取的文件内容 是一个buffer数据,想要看具体内容,需要tostring
- callpack
fs.readFile('./package.json', (err, data) => {
if (!err) {
console.log(data.toString());
} else {
console.log(err);
}
});
stat 文件的数据
const {readFile, stat, watchFile} = require("fs");
stat("文件路径",(err,stats)=>{
stats就是文件的信息
放入etag(stats) 就会生成一个独有的id
})
监听 当文件css改变时,就会触发
watchFile(css, (curr, prev) => {
curr就是现在的文件
etagName = etag(curr); //curr 中 有stats
lastModified = new Date().toGMTString()
});