当前位置: 首页 > news >正文

NodeJs-fs模块

fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块, fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动,内容的写入读取等以及文件夹相关操作

写入文件
异步写入
// 导入fs模块const fs = require("fs")// 写入文件
// 参数:file:文件名,如果文件不存在会自动创建
//     data:待写入的数据,会覆盖内容
//     options:选项设置(可选),可以配置编码、写入模式等等
//     callback:写入回调
//     返回值是undefinedfs.writeFile("./test.txt","helloword",err => {// 写入完成之后会自动调用回调函数,如果写入失败,err是一个错误对象console.log(err)
})
同步写入
// 写入文件
// 参数:file:文件名,如果文件不存在会自动创建
//     data:待写入的数据,会覆盖内容
//     options:选项设置(可选)fs.writeFileSync("./test1.txt","helloword")
追加写入
  1. 异步写入

    // 以追加的形式写入
    fs.appendFile("./test.txt", "helloword", err => {console.log(err)
    })
  2. 同步写入

    fs.appendFileSync("./test.txt", "helloword", err => {console.log(err)
    })
流式写入

程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数,流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景,相当于 程序和文件建立一个通道,打开一次,持续的写入,最终关闭一次

// 导入fs模块const fs = require("fs")// 创建写入流对象
// 参数:文件路径、options选项,返回值是一个对象
let ws = fs.createWriteStream("./text.txt")// 写入的内容
ws.write("aaaa")
ws.write("bbbb")
ws.write("cccc")// 关闭写入流,可选显示调用
ws.end()
文件读取
异步读取
// 导入fs模块const fs = require("fs")// 异步读取
// 参数:文件路径、options选项配置、回调函数
fs.readFile("./text.txt",(err,data)=>{// 读取到文件之后,回调函数会被调用if (err){console.log("读取失败")}else {// 读取到的内容是一个buffer,可以使用toString转换console.log(data.toString())}})
同步读取
let data = fs.readFileSync("./text.txt")console.log(data.toString())
流式读取
// 导入fs模块const fs = require("fs")// 创建读取流对象
let rs = fs.createReadStream("./text.tx")// 给rs绑定data事件,每次读取64k的数据,每次读取一次后触发一次chunk回调
rs.on("data", chunk => {console.log(chunk)
})// 绑定end事件(可选)
// 全部读取完成后,触发end回调
rs.on("end", ()=>{console.log("关闭")
})
文件移动&重命名

使用 rename 或 renameSync 来移动或重命名 文件或文件夹

  1. 异步操作

    // 参数:oldPath 文件当前的路径 、newPath 文件新的路径 、callback 操作后的回调// 重命名
    fs.rename("./text.txt","./run.txt", err => {if (err){console.log(err)}else {console.log("成功")}})// 文件移动
    fs.rename("./run.txt","../data/run.txt",err =>{console.log(err)
    })
  2. 同步操作

    // 参数:oldPath 文件当前的路径 、newPath 文件新的路径
    fs.renameSync("./run.txt","./text.txt")
文件删除
  1. 异步删除

    fs.unlink("./text.txt",err => {console.log(err)
    })
  2. 同步删除

    fs.unlinkSync("./text.txt",err => {console.log(err)
    })
  3. rm方法删除,node14.4版本引入的新方法

    // 异步
    fs.rm("./text.txt",err => {console.log(err)
    })// 同步
    fs.rmSync("./text.txt")
文件夹操作
创建文件夹
  1. 异步创建

    // 只能创建一层目录
    // 参数:文件路径、选项配置、回调函数
    fs.mkdir("./data", err => {if (err){console.log("失败")}else {console.log("成功")}
    })
  2. 递归异步创建

    // 递归创建-可以创建多层目录,创建src文件夹在src下创建uti文件夹l在util下创建main文件夹
    fs.mkdir("./src/util/main",{recursive:true},err => {console.log(err)
    })
  3. 同步创建

    fs.mkdirSync("./dat1a")
  4. 递归同步创建

    // 递归创建-可以创建多层目录,创建src文件夹在src下创建uti文件夹l在util下创建main文件夹
    fs.mkdirSync("./src/util/main",{recursive:true})
读取文件夹
  1. 异步读取

    fs.readdir("./",(err,data) =>{console.log(err)console.log(data) // 是一个数组,是文件夹下路径下的资源
    })
  2. 同步读取

    let data = fs.readdirSync("./")
    console.log(data)
删除文件夹
  1. 异步删除

    // 只能删除一层目录
    fs.rmdir("./data",err =>{console.log(err)
    })// 递归删除
    fs.rmdir("./data/main",{recursive:true},err =>{console.log(err)
    })
  2. 同步删除

    fs.rmdirSync("./data")// 递归同步删除
    fs.rmdirSync("./data",{recursive:true})
资源状态
// 异步
fs.stat("./data",(err,data)=>{console.log(err)console.log(data) // 是一个对象,包含文件创建时间、体积、类型等等各种信息})// 同步
fs.statSync("./data")
__dirname

__dirname 与 require 类似,都是 Node.js 环境中的'全局'变量

__dirname 保存着 当前文件所在目录的绝对路径 ,可以使用__dirname 与文件名拼接成绝对路径

let data = fs.readFileSync(__dirname + '/data.txt');
http://www.lryc.cn/news/503996.html

相关文章:

  • Transformer: Attention Is All You Need (2017) 翻译
  • 【记录】Django解决与VUE跨域问题
  • Java 常见Exception异常解决方法
  • 东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南
  • TIM输入捕获---STM
  • 【笔记】架构上篇Day6 法则四:为什么要顺应技术的生命周期?
  • MSF(Metasploit Framework)
  • Python中的OpenCV详解
  • IMX6ULL开发板学习嵌入式技术过程中为了测试本地网络是否正常而常用的Ping命令
  • Blue Ocean 在Jenkins上创建Pipeline使用详解
  • 2024 年最新前端ES-Module模块化、webpack打包工具详细教程(更新中)
  • photoshop的2个形状-箭头
  • 【经验分享】搭建本地训练环境知识点及方法
  • AI知识-多模态(Multimodal)
  • 代码随想录 leetcode-数据结构刷题笔记
  • Oracle最佳实践-优化硬解析
  • Windows中将springboot项目运行到docker的容器中
  • 30、使用ESP8266跟SG90舵机制作四足蜘蛛机器人
  • 相比普通LED显示屏,强力巨彩软模组有哪些优势?
  • 部门操作和日志
  • antdv-<a-button>中属性的使用
  • python解题之寻找最大的葫芦
  • iOS 环境搭建教程
  • 制作容器镜像
  • 基于Python对xslxslx文件进行操作
  • 语音芯片赋能可穿戴设备:开启个性化音频新体验
  • Unity学习笔记(一)如何实现物体之间碰撞
  • LinkedList与链表 和 链表面试题
  • ansible自动化运维(一)简介及清单,模块
  • 利用代理IP爬取Zillow房产数据用于数据分析