node fs模板及蓝桥案例实战

文章目录

  • 介绍
  • 文件写入
    • 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) 

实战

node fs模板及蓝桥案例实战_第1张图片

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; // 请勿删除该行代码,否则影响判题!

你可能感兴趣的:(node.js,蓝桥杯)