文章目录
- 介绍
- 文件写入
- writeFile 异步写入
- writeFileSync 同步写入
- appendFile / appendFileSync 追加写入
- createWriteStream 流式写入
- 文件读取
- readFile 异步读取
- readFileSync 同步读取
- createReadStream 流式读取
- 文件移动与重命名
- 文件删除
- 文件夹操作
- mkdir / mkdirSync 创建文件夹
- readdir / readdirSync 读取文件夹
- rmdir / rmdirSync 删除文件夹
- __dirname
- 实战
介绍
fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块 ,可以对计算机中的磁盘进行操作。
主要操作有:
1.文件写入
2.文件读取
3.文件移动与重命名
4.文件删除
5.文件夹操作
6.查看资源状态
文件写入
writeFile 异步写入
writeFileSync 同步写入
appendFile / appendFileSync 追加写入
createWriteStream 流式写入
writeFile 异步写入
fs.writeFile(file, data[, options], callback)
参数说明:
file 文件名
data 待写入的数据
options 选项设置 (可选)
callback 写入回调
writeFileSync 同步写入
语法: fs.writeFileSync(file, data[, options])
appendFile / appendFileSync 追加写入
appendFile 作用是在文件尾部追加内容,appendFile 语法与 writeFile 语法完全相同
语法:
fs.appendFile(file, data[, options], callback)
fs.appendFileSync(file, data[, options])
createWriteStream 流式写入
语法:fs.createWriteStream(path[, options])
参数说明:
path 文件路径
options 选项配置( 可选 )
文件读取
readFile 异步读取
readFileSync 同步读取
createReadStream 流式读取
readFile 异步读取
fs.readFile(path[, options], callback)
参数说明:
path 文件路径
options 选项配置
callback 回调函数
readFileSync 同步读取
语法:fs.readFileSync(path[, options])
参数说明:
path 文件路径
options 选项配置
createReadStream 流式读取
语法:fs.createReadStream(path[, options])
参数说明:
path 文件路径
options 选项配置( 可选 )
文件移动与重命名
语法:
fs.rename(oldPath, newPath, callback)
fs.renameSync(oldPath, newPath)
参数说明:
oldPath 文件当前的路径
newPath 文件新的路径
callback 操作后的回调
文件删除
语法:
fs.unlink(path, callback)
fs.unlinkSync(path)
参数说明:
path 文件路径
callback 操作后的回调
文件夹操作
mkdir / mkdirSync 创建文件夹
语法:
fs.mkdir(path[, options], callback)
fs.mkdirSync(path[, options])
参数说明:
path 文件夹路径
options 选项配置( 可选 )
callback 操作后的回调
readdir / readdirSync 读取文件夹
语法:
fs.readdir(path[, options], callback)
fs.readdirSync(path[, options])
参数说明:
path 文件夹路径
options 选项配置( 可选 )
callback 操作后的回调
rmdir / rmdirSync 删除文件夹
语法:
fs.rmdir(path[, options], callback)
fs.redirSync(path[, options])
参数说明:
path 文件夹路径
options 选项配置( 可选 )
callback 操作后的回调
__dirname
使用 fs 模块的时候,尽量使用 __dirname 路径转换为绝对路径,这样可以避免相对路径产生的 Bug
//=>__dirname + '/data.txt' === 'D:\\Desktop\\Node\\code\\03-fs模块/data.txt'
let data = fs.readFileSync(__dirname + '/data.txt')
console.log(data)
实战
const path = require("path");
const fs = require("fs");
const articlesPath = path.resolve(__dirname, "articles");
const imagesPath = path.resolve(__dirname, "images");
let findUnlinkImages = async function () {
let unlinkImages = []; // 未被任何 md 文件引用的图片的数组
// TODO 请通过 Node.js 在此处继续完成代码编写
//异步执行操作
await traversalDir(articlesPath)//遍历文章文件
.then(files => {
files.forEach(file => {
searchImage(fs.readFileSync(path.resolve(articlesPath, file)))//提取文章链接
//遍历完已经存入数组
});
})
.then(()=>{
return traversalDir(imagesPath)//遍历图片文件
}).then((files) =>{
unlinkImages = files.filter((file) => !useImgs.includes(`../images/${file}`))//过滤数组
})
return unlinkImages; // 此处应返回一个数组,如不明白,请仔细阅读题目
};
// 参考方法: 遍历文件列表
function traversalDir(path) {
return new Promise((resolve) => {
fs.readdir(path, async function (err, files) {
if (!err) {
resolve(files);
}
});
});
}
let useImgs = [];
/**
* 参考方法: 正则提取文章内的全部图片链接
* @param {string} md 传入的markdown文本内容
* @returns 包含所有图片链接的数组
*/
function searchImage(md) {
const pattern = /!\[(.*?)\]\((.*?)\)/gm;
let matcher;
while ((matcher = pattern.exec(md)) !== null) {
if (matcher[2].indexOf("images") !== -1) {
// 判断存在图片,matcher[2] 即为包含的链接
useImgs.push(matcher[2]);
}
}
return useImgs;
}
module.exports = findUnlinkImages; // 请勿删除该行代码,否则影响判题!