node fs模板及蓝桥案例实战

news2024/12/23 4:09:59

文章目录

  • 介绍
  • 文件写入
    • 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; // 请勿删除该行代码,否则影响判题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1251500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DNS/ICMP协议、NAT技术

目录 DNS协议DNS背景域名简介 ICMP协议ICMP功能ping命令traceroute命令 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS协议 DNS(Domain Name System,域名系统)协议&…

【送书福利-第二十八期】《从概念到现实:ChatGPT和Midjourney的设计之旅》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

软件测试之银行测试详解

一、金融类软件测试 举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班的话想对来说没那么多(有些银行加班也挺严重的),但业务稳定。实在是测试类岗位中的香饽饽&#xf…

实现简单的操作服务器和客户端(上)

一、说明 描述:本教程介绍如何使用 simple_action_server 库创建斐波那契动作服务器。此示例操作服务器生成斐波那契序列,目标是序列的顺序,反馈是计算的序列,结果是最终序列。 内容 创建操作消息编写一个简单的服务器 代码

没搞懂二维差分是什么怎么办???

摸鱼的时候画的,根据公式反推 一维差分倒是懂了 a[10]{1,2,6,9,11,12,17,21,32,67}; c[10]{1,1,4,3,2,1,5,4,11,35}; 现要把[3,7]的值都增加3 c[10]{1,1,7,3,2,1,5,1,11,35}; 要查询的时候再用for循环相加 结论:成立且适用于多次修改 不知道为什么这个…

Praat脚本-038 | 批量替换标注TextGrid里的换行符

目录 引题获取脚本运行脚本知识引申关注版权说明 引题 我们在做标注的时候,可能会犯这样一个小错误,就是在标注的内容中间不小心进行了换行,大概会成为这个样子。 这样会有什么问题呢?在提取数据的时候,你会发现&…

【数据结构】堆(C语言)

今天我们来学习堆,它也是二叉树的一种(我滴神树!) 目录 堆的介绍:堆的代码实现:堆的结构体创建:堆的初始化:堆的销毁:堆的push:堆的pop:判空 &am…

AI创作工具:Claude2注册保姆级教程

最近软件打算多接入几个AI写作平台,包括讯飞星火,百度文心,Claude2,这样就能给用户提供更多的写作选择 经过半天的调研,讯飞星火,百度文心一言,接入都比较简单,毕竟是国内的。 在调…

鸿蒙HarmonyOS 编辑器 下载 安装

好 各位 之前的文章 注册并实名认证华为开发者账号 我们基实名注册了华为的开发者账号 我们可以访问官网 https://developer.harmonyos.com/cn/develop/deveco-studio 在这里 直接就有我们编辑器的下载按钮 我们直接点击立即下载 这里 我们根据自己的系统选择要下载的系统 例…

关于pytorch以及相关包的安装教程

一.查看自己电脑的配置 首先查看自己电脑的cuda的版本,WinR,敲入cmd打开终端 输入nvidia-smi,查看自己电脑的显卡等配置 这里要说明一下关于这个CUDA,它具有向后兼容性,这意味着支持较低版本的 CUDA 的应用程序通常也可以在较高版本的 CUD…

虚拟机VMware客户机隔离灰色如何解决||实现本机复制粘贴到虚拟机

前言:本次镜像为win10,其他操作系统也欢迎尝试 现象:虚拟机设置选项不可编辑,且是否勾选都无法实现复制粘贴 可能存在的问题解决方案 Q1:未安装虚拟机工具:VMware Tools A1:安装工具&#xff…

Python基础教程之循环结构详解,循环结构逻辑解析。

文章目录 前言一、While循环二、While…else…循环三、for循环四、for…else…循环五、循环体结束语句六、嵌套循环关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③…

C#,《小白学程序》第五课:队列(Queue)其一,排队的技术与算法

日常生活中常见的排队&#xff0c;软件怎么体现呢&#xff1f; 排队的基本原则是&#xff1a;先到先得&#xff0c;先到先吃&#xff0c;先进先出 1 文本格式 /// <summary> /// 《小白学程序》第五课&#xff1a;队列&#xff08;Queue&#xff09; /// 日常生活中常见…

01_原理-事件循环

01_原理-事件循环 文章目录 01_原理-事件循环一、浏览器的进程模型①&#xff1a;何为进程&#xff1f;②&#xff1a;何为线程&#xff1f;③&#xff1a;浏览器有哪些进程和线程&#xff1f; 二、渲染主线程是如何工作的&#xff1f;三、若干解释①&#xff1a;何为异步&…

人力资源管理后台 === 基础环境+登陆

目录 1.人力资源项目介绍 1.1 项目架构和解决方案 1.2 课程安排 1.3 课程具备能力 1.4 课程地址 2. 拉取项目基础代码 3.项目目录和入口文件介绍 4.App.vue根组件解析 5.基础设置settings.js和导航守卫permission.js 6.Vuex的结构 7.使用模板中的Icon图标 8.扩展…

【Web】NewStarCtf Week2 个人复现

目录 ①游戏高手 ②include 0。0 ③ez_sql ④Unserialize&#xff1f; ⑤Upload again! ⑥ R!!C!!E!! ①游戏高手 经典前端js小游戏 检索与分数相关的变量 控制台直接修改分数拿到flag ②include 0。0 禁了base64和rot13 尝试过包含/var/log/apache/access.log,ph…

了解抽象思维的应用与实践

目录 一、快速了解抽象思维 &#xff08;一&#xff09;抽象思维的本质理解 &#xff08;二&#xff09;系统架构中的重要性 &#xff08;三&#xff09;软件开发中抽象的基本过程思考 意识和手段 抽象的方式 抽象层次的权衡 二、业务中的应用实践 &#xff08;一&…

你知道如何使用队列实现栈吗?(C语言)

这时一道非常经典的题型&#xff0c;因为栈和队列的性质是相反的&#xff0c;队列的数据是先入先出&#xff0c;栈的数据是后入先出&#xff0c;那么怎样使用两个队列实现栈呢&#xff1f; 225. 用队列实现栈https://leetcode.cn/problems/implement-stack-using-queues/ 这是…

212. 单词搜索 II

212. 单词搜索 II Java&#xff1a;搜索全部可能 class Solution {StringBuilder sb;List<String> list;Set<String> set;private void dfs(int x, int y, int m, int n, char[][] board){if (x < 0 || x > m || y < 0 || y > n || board[x][y] .) {…

您的计算机已被.locked1勒索病毒感染?恢复您的数据的方法在这里!

尊敬的读者&#xff1a; 勒索病毒如.locked1已经成为网络安全的一大威胁。这类病毒通过加密用户文件&#xff0c;并勒索赎金以解密这些文件&#xff0c;给用户和组织带来了巨大的损害。本文将深入介绍.locked1勒索病毒的特点、恶意目的&#xff0c;以及如何恢复被其加密的数据…