NodeJS 文件操作④

news2024/11/26 21:25:59

文章目录

  • ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘
  • 前言
  • NODE内置模块
  •    FS模块
  •    CallBack API
  •    mkdir (创建文件夹 异步)
  •    rmdir(删除文件夹 异步)
  •    rm(删除文件和目录 异步)
  •    rename(文件夹改名 异步)
  •    writeFile(写内容到文件里 异步)
  •    appendFile(给文件追加内容 异步)
  •    readFile(读取文件内容 异步)
  •    unlink(删除文件 异步)
  •    readdir(读取文件/目录信息 异步)
  •    stat(判断文件的类型 异步)
  •    Stream流
  •    createReadStream(可读流 异步)
  •    createWriteStream(可写流 异步)
  •    pipe(Readable方法 异步)
  • 总结


✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘

                    ⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   

前言

  1. Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与```PHP、Java、Python、.NET、Ruby等后端语言平起平坐。
  2. Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的JS解释,但是Node之父 Ryan Dahl在这里插入图片描述把这V8搬到了服务器上,用于做服务器的软件。

NODE内置模块

   FS模块

Node : https://nodejs.cn/api/fs.html

作用:文件操作

   CallBack API

   mkdir (创建文件夹 异步)

mkdir (创建文件夹 异步)

  • 语法:fs.mkdir(path[, options(recursive:是否应创建父目录)], callback)

代码

const fs = require("fs")
//创建目录
fs.mkdir("./A/AA/AAA", { recursive: true }, (err) => {
    console.log(err)
    //如果有第二个参数 测err为空,否者是一个对象
    if (err && err.code === "EEXIST") {
        console.log("目录已经存在")
    }
})

   rmdir(删除文件夹 异步)

rmdir(删除文件夹 异步)

  • 语法:fs.rmdir(path[, options], callback)

代码

const fs = require("fs")

fs.rmdir("./A", err => {
    if (err && err.code === "ENOENT") {
        console.log("目录不存在")
    }
    console.log(err)
})

   rm(删除文件和目录 异步)

rm(删除文件 异步)

  • 语法:fs.rm(path[, options], callback)

代码

// path <string> | <Buffer> | <URL>
// options <Object>
    // force <boolean> 当为 true 时,如果 path 不存在,则异常将被忽略。 默认值: false。
    // recursive <boolean> 如果为 true,则执行递归删除。 在递归模式下,操作将在失败时重试。 默认值: false。
    // retryDelay <integer> 重试之间等待的时间(以毫秒为单位)。 如果 recursive 选项不为 true,则忽略此选项。 默认值: 100。
// callback <Function>
// err <Error></Error>

fs.rm("./A", { force: true, recursive: true, retryDelay: 5000 }, err => {
    if (err && err.code === "ENOENT") {
        console.log("目录不存在")
    }
    console.log(err)
})

   rename(文件夹改名 异步)

rename(文件夹改名 异步)

  • 语法:fs.rename(path[, options], callback)

代码

// oldPath <string> | <Buffer> | <URL>
// newPath <string> | <Buffer> | <URL>
// callback <Function>
//      err <Error></Error>
const fs = require("fs")

fs.rename("./A2/AA/AAA", "./A2/AA/A2", (err) => {
    if (err && err.code === "ENOENT") {
        console.log("目录不存在")
    }
    console.log(err);
})

   writeFile(写内容到文件里 异步)

writeFile(写内容到文件里 异步)

  • 语法:fs.writeFile(file, data[, options], callback)

代码

// file <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符
// data <string> | <Buffer> | <TypedArray> | <DataView> | <Object>
// options <Object> | <string>
//      encoding <string> | <null> 默认值: 'utf8'
//      mode <integer> 默认值: 0o666
//      flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'w'。
//      signal <AbortSignal> 允许中止正在进行的写入文件
// callback <Function>
//      err <Error> | <AggregateError>

const fs = require("fs")

fs.writeFile("./A/AA/AAA/a.txt", "你好", { encoding: "utf-8", flag: 'w' }, err => {
    console.log(err)
})

   appendFile(给文件追加内容 异步)

appendFile(给文件追加内容 异步)

  • 语法:fs.appendFile(path, data[, options], callback)

代码

// path <string> | <Buffer> | <URL> | <number> 文件名或文件描述符
// data <string> | <Buffer>
// options <Object> | <string>
//         encoding <string> | <null> 默认值: 'utf8'
//         mode <integer> 默认值: 0o666
//         flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'a'。
// callback <Function>
//         err <Error>

const fs = require("fs")

fs.appendFile("./A/AA/AAA/aw.txt", "\nhello world", err => {
    console.log(err)
})

   readFile(读取文件内容 异步)

readFile(读取文件内容 异步)

  • 语法:fs.readFile(path[, options], callback)

代码

玩法一

// path <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符
// options <Object> | <string>
//         encoding <string> | <null> 默认值: null
//         flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'r'。
//         signal <AbortSignal> 允许中止正在进行的读取文件
// callback <Function>
//         err <Error> | <AggregateError>
//         data <string> | <Buffer>

const fs = require("fs")

fs.readFile("./A/AA/AAA/a.txt",(err,data)=>{
    if(!err){
        console.log(data.toString("utf-8"))
    }
})

fs.readFile("./A/AA/AAA/a.txt", "utf-8", (err, data) => {
    if (!err) {
        console.log(data)
    }
})


玩法二
const fs = require("fs").promises

fs.readFile("./A/AA/AAA/a.txt", "utf-8").then(data => {
    console.log(data)
})

玩法三
const fs = require("fs").promises

fs.readdir("./A/AA/AAA").then(async (data) => {
    let arr = []
    await Promise.all(data.map(item => {
        fs.unlink(`./A/AA/AAA/${item}`)
    }))
    await fs.rmdir("./A/AA/AAA")
})

   unlink(删除文件 异步)

unlink(删除文件 异步)

  • 语法:fs.unlink(path, callback)

代码

// path <string> | <Buffer> | <URL>
// callback <Function>
//     err <Error>
const fs = require("fs")

fs.unlink("./A/AA", err => {
    console.log(err)
})

   readdir(读取文件/目录信息 异步)

readdir(读取文件/目录信息 异步)

  • 语法:fs.readdir(path[, options], callback)

代码

// path <string> | <Buffer> | <URL>
// options <string> | <Object>
        // encoding <string> 默认值: 'utf8'
        // withFileTypes <boolean> 默认值: false 设置为 true,则 files 数组将包含 <fs.Dirent> 对象。
// callback <Function>
        // err <Error>
        // files <string[]> | <Buffer[]> | <fs.Dirent[]>
        
const fs = require("fs")

fs.readdir("./A2/AA/A2", (err, data) => {
    if (!err) {
        console.log(data)
    }
})

   stat(判断文件的类型 异步)

stat(判断文件的类型 异步)

  • 语法:fs.stat(path[, options], callback)

代码

// path <string> | <Buffer> | <URL>
// options <Object>
//         bigint <boolean> 返回的 <fs.Stats> 对象中的数值是否应为 bigint。 默认值: false。
// callback <Function>
//         err <Error>
//         stats <fs.Stats>
const fs = require("fs")

fs.stat("./A2/AA", (err, data) => {
    console.log(data.isFile())
    console.log(data.isDirectory())
})

   Stream流

  • 说明:stream 是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。

  • 什么是流❓: 流是一种抽象的数据结构。想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地到达另一个地方(比如你家的洗手池)。我们也可以把数据看成是数据流,标准输入流(stdin)。

   createReadStream(可读流 异步)

createReadStream(可读流 异步)

  • 语法:fs.createReadStream(path[, options])

代码

const fs = require("fs")

const rs = fs.createReadStream("./1.txt", "utf-8")

rs.on("data", (chunk) => {
    console.log("chunk-", chunk) //读取
})

rs.on("end", () => {
    console.log("end")   //结束
})

rs.on("error", (err) => { //出错
    console.log(err)
})

注意: data 事件可能会有多次,每次传递的 chunk是流的一部分数据。
注意:要以流的形式写入文件,只需要不断调用write()方法,最后以end() 结束

   createWriteStream(可写流 异步)

createWriteStream(可写流 异步)

  • 语法:fs.createWriteStream(path[, options])

代码

const fs = require("fs")

const ws = fs.createWriteStream("./2.txt", "utf-8")
ws.write("写入文件!")

ws.end()

   pipe(Readable方法 异步)

说明:pipe 就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个Readable 流和一个Writable 流串起来后,所有的数据自动从Readable 流进入Writable 流,这种操作叫pipe 。

pipe 把两个水管串成一个更长的水管一样

  • 语法:readStream.pipe(writeStream)

代码

//确保读取的文件写入到文件中

const fs = require("fs")

const readStream = fs.createReadStream("./1.txt")

const writeStream = fs.createWriteStream("./2.txt")

readStream.pipe(writeStream)

总结

以上是个人学习Node的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

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

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

相关文章

百度爱番番的线索如何自动导入至CRM系统中?

百度爱番番是什么&#xff1f; 百度爱番番是应用百度强大AI能力&#xff0c;帮助企业实现营销数字化、自动化、智能化&#xff0c;为企业提供拓客、集客、管客的一站式智能解决方案&#xff0c;助力企业营销变得专业且智能。 百度爱番番的线索如何自动导入至CRM系统中&#xf…

MKS SERVO4257D 闭环步进电机_系列2 菜单说明

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&am…

数据结构和算法,在Python中的实现方式

部分数据来源&#xff1a;ChatGPT 数据结构 在计算机科学中&#xff0c;数据结构指的是计算机中用来存储和组织数据的方式。数据结构是为算法服务的&#xff0c;同一个算法在不同的数据结构上运行效率可能会有很大的不同。这就要求我们在解决问题时要根据具体情况选择合适的数…

前端中间件Midway的使用

一、 关于midway1. 解决什么痛点2. 期望达到什么效果 二、创建应用并使用1. 创建midway应用2. 认识Midway2.1 目录结构2.2 Controller2.3 路由2.4 获取请求参数2.5 Web中间件2.6 组件使用2.7 服务(service) 三、写到最后 一、 关于midway Midway 是阿里巴巴 - 淘宝前端架构团队…

别做重复低质的工作内容摸鱼了,18k大佬分享自动化测试秘籍

自动化测试面试真题&#xff08;附答案&#xff09; 一、编程语法题 1、python有哪些数据类型 2、怎么将两个字典合并 3、python 如何将json写到文件里? 4、 __init__和_new__区别? 5、什么是可变、不可变类型&#xff1f; 6、mysql注入点&#xff0c;用工具对目标站直接写入…

IDEA操作数据库并设置时区

目录 设置mysql的时区的方法&#xff08;提供三种选择&#xff09; 1、直接在advanced上配置serverTimezone属性值&#xff08;单次连接有效&#xff09; 2、进入MySQL客户端修改time_zone 3、直接修改MySQL的my.ini配置文件设置time-zone 使用Database 1、查看当前数据源…

uCOSii信号量的作用

uCOSii中信号量的作用&#xff1a; 在创建信号量时&#xff0c;Sem_EventOSSemCreate(1)用于分时复用共享资源&#xff1b; Sem_EventOSSemCreate(0)用于中断和任务间同步或任务之间的同步。 具体在使用时&#xff0c;需要灵活运用。在访问共享资源时&#xff0c;我喜欢用互…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月26日论文合集)

文章目录 一、检测相关(9篇)1.1 Energy-based Detection of Adverse Weather Effects in LiDAR Data1.2 Anomaly Detection with Conditioned Denoising Diffusion Models1.3 Mask Attack Detection Using Vascular-weighted Motion-robust rPPG Signals1.4 Improved Multi-Sca…

AccessShareLock pg cancel backend terminate backend

AccessShareLock 在PostgreSQL中&#xff0c;AccessShareLock是一种用于控制对数据库对象并发访问的锁类型。它是一种读锁&#xff0c;允许多个事务同时从同一个对象进行读取&#xff0c;但它阻止并发事务获取冲突的锁&#xff0c;比如写锁或独占锁。 当一个事务在对象上获取…

【指针的深刻理解】

如何看待下面代码中的a变量? #include<stdio.h> int main() {int a 0;//同样的一个a&#xff0c;在不同的表达式中&#xff0c;名称是一样的&#xff0c;但是含义是完全不同的&#xff01;a 10;//使用的是a的空间&#xff1a;左值int b a; //使用的是a的内容&#x…

Java jiraClient上传附件不能在浏览器预览的问题分析

最近测试的同学反馈问题说使用平台的报bug上传视频的附件以后&#xff0c;然后在jira上确没有办法通过点击附件进行预览&#xff0c;而需要下载下来才能够查看。但是如果是直接在jira上进行上传附件就不会有这个问题 如果说不了解具体原因的&#xff0c;其实就会觉得这个问题非…

【Linux】Top命令参数解释

TOP命令 这是一个Linux系统下 top 命令所输出的进程监控信息。以下是各列含义&#xff1a; top - 09:52:15&#xff1a;当前时间。 up 27 min&#xff1a;系统已经运行的时长。 2 users&#xff1a;当前有2个用户登录到系统上。 load average: 0.97, 0.41, 0.21&#xff1a;系…

Git进阶+Jenkins入门

文章目录 1 Git进阶——GitFlow工作流程1.1 master与develop分支1.1.1 master1.1.2 develop 1.2 feature分支1.3 Release分支1.4 hotfix分支1.1.3 1 Git进阶——GitFlow工作流程 1.1 master与develop分支 1.1.1 master master&#xff1a;发布上线分支&#xff0c;基于master打…

c++调用dll出现LNK2001 无法解析的外部符号

先说说下正常的dll。 动态库显试调用一般3个文件.h .lib .dll &#xff0c;隐式调用 只需要2个文件:.h&#xff08;函数定义&#xff09; .dll 静态库2个文件&#xff1a;.h .lib 先说C正常dll显式调用 #include "BYD_MES/MES2Interface.h" //#include 是以当前…

HTML表单标签form分析

说明&#xff1a;在html的标签中&#xff0c;表单标签与后台联系密切&#xff0c;像用户登录、注册&#xff0c;都是用到页面的表单标签&#xff0c;用户将信息填入到表单中&#xff0c;提交到后端业务中校验处理&#xff0c;再将结果反馈给前端页面。 表单内的标签分别有&…

ChatGPT国内免费使用的方法有哪些?分享几个网内可用的免费的ChatGPT网页版

目录 一、ChatGpt是什么&#xff1f; 二、ChatGPT国内免费使用的方法&#xff1a; 第一点&#xff1a;电脑端 第二点&#xff1a;手机端 三、结语&#xff1a; 一、ChatGpt是什么&#xff1f; ChatGPt是美国OpenAI [1] 研发的聊天机器人程序 。更是人工智能技术驱动的自然语言…

【学习日记2023.5.26】 之 客户端之完善缓存和购物车模块

文章目录 7. 用户端之完善缓存和购物车模块7.1 缓存菜品7.1.1 问题说明7.1.2 实现思路7.1.3 代码开发7.1.4 功能测试7.1.5 提交代码 7.2 缓存套餐7.2.1 Spring Cache7.2.1.1 介绍2.1.2 常用注解7.2.1.3 入门案例 7.2.2 实现思路7.2.3 代码开发7.2.4 功能测试7.2.5 提交代码 7.3…

14-C++面向对象(单例模式、const成员、浅拷贝、深拷贝)

单例模式 单例模式&#xff1a;设计模式的一种&#xff0c;保证某个类永远只创建一个对象 构造函数\析构函数 私有化 定义一个私有的static成员变量指向唯一的那个单例对象&#xff08;Rocket* m_rocket&#xff09; 提供一个公共的访问单例对象的接口&#xff0…

[组合数学] 容斥原理polya定理

数学 A 170 物理 B130 化学C120 A ∩ B 45 A ∩ C 20 B ∩ C 22 A ∩ B ∩ C 3 A\cap B 45\quad A\cap C20 \quad B\cap C 22 \quad A\cap B\cap C 3 A∩B45A∩C20B∩C22A∩B∩C3 ∣ A ∪ B ∪ C ∣ A B C − A ∩ B − B ∩ C − A ∩ C A ∩ B ∩ C 170 130 …

vcruntime140.dll丢失怎么办?怎么解决vcruntime140.dll丢失的问题

当您运行一个需要此文件的程序时&#xff0c;如果您的系统中不存在这个文件&#xff0c;会提示出错信息“找不到vcruntime140.dll”或“vcruntime140.dll丢失”。这种情况下&#xff0c;您需要解决这个问题&#xff0c;才能继续运行此应用程序。我们将介绍vcruntime140.dll丢失…