【玩转Node.JS】=>(内置文件系统)fs模块

在这里插入图片描述

文章目录

  • 概念:
  • 文件写入
    • writeFile (异步写入)
    • writeFileSync(同步写入)
    • appendFile (异步追加写入)
    • appendFileSync(同步追加写入)
    • createWriteStream (文件流式写入)
  • 文件读取
    • readFile (异步读取)
    • readFileSync (同步读取)
    • createReadStream (文件流式读取)
  • 复制文件
    • copyFile (异步复制文件)
    • copyFileSync (同步复制文件)
  • 文件(夹)移动与重命名
    • rename(异步/同步重命名/移动)
  • 文件删除
    • unlink 或 rm(同步/异步)
  • 文件夹操作
    • 创建文件夹
    • 读取文件夹
    • 删除文件夹
  • 查看资源状态
  • __dirname

在这里插入图片描述

概念:

fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块 ,可以对计算机中的磁盘进行操作

在这里插入图片描述

文件写入

文件写入就是将 数据 保存到 文件 中,我们可以使用如下几个方法来实现该效果

writeFile (异步写入)

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

参数说明:

  • file 写入的文件路径名
  • data 写入的数据
  • options 配置对象设置 (可选)
  • callback 写入回调函数

  • 示例
const fs = require("fs");   /** @导入fs模块 **/fs.writeFile('./异步创建文件.txt', '给文件中插入一条数据', err => {//如果写入失败,则回调函数调用时,会接收一个错误对象,如写入成功,会返回 nullif (err) {console.log('写入失败');return;}console.log('写入成功');
});

writeFileSync(同步写入)

  • 语法
fs.writeFileSync(file, data[, options])

参数说明:

  • file 写入的文件路径名
  • data 待写入的数据
  • options 配置对象设置 (可选)
  • 注明:
    同步写入没有回调函数

  • 示例
const fs = require("fs");   /** @导入fs模块 **/
fs.writeFileSync('./同步创建文件.txt', '一段字符串')

appendFile (异步追加写入)

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

参数说明:

  • file 追加写入的文件路径名
  • data 待追加写入的数据
  • options 配置对象设置 (可选)
  • callback 写入回调函数

  • 示例
const fs = require("fs");   /** @导入fs模块 **/fs.appendFile('./异步创建文件.txt', '异步追加文字', err => {if (err) {console.log('写入失败');return;} else {console.log('写入成功');}
})

appendFileSync(同步追加写入)

  • 语法
fs.appendFileSync(file, data[, options])

参数说明:

  • file 文件名
  • data 待追加写入的数据
  • options 配置对象设置 (可选)
  • 注明:
    同步追加写入没有回调函数

  • 示例:
const fs = require("fs");   /** @导入fs模块 **/
fs.appendFileSync('./同步创建文件.txt', '同步追加一段字符串')

补充

writeFile/writeFileSync 也可以实现追加写入,需要在第三个参数配置对象中写入 {flag:' a '},就可以实现


createWriteStream (文件流式写入)

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

参数说明:

  • path 文件路径
  • options 配置对象( 可选 )

返回值: Object

  • 示例
const fs = require('fs');
let ws = fs.createWriteStream('./观书有感.txt');
ws.write('第一段文字\r\n');
ws.write('第二段文字\r\n');
ws.write('第三段文字\r\n');
ws.write('第四段文字\r\n');
ws.close();   //关闭流式写入

在这里插入图片描述

文件写入概括:

方法描述
writeFile异步写入
writeFileSync同步写入
appendFile异步追加写入
appendFileSync同步追加写入
createWriteStream流式写入

文件读取

readFile (异步读取)

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

参数说明:

  • path 文件路径
  • options 选项配置
  • callback 回调函数

示例

const fs = require('fs');
fs.readFile('./新建文件.txt', (err, data) => {if (err) {console.log("读取失败");return;} else {console.log("读取成功");console.log(data.toString());}
})fs.readFile('./新建文件.txt', 'utf-8', (err, data) => {if (err) {console.log("读取失败");return;} else {console.log("读取成功");console.log(data);}
})

readFileSync (同步读取)

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

参数说明:

  • path 文件路径
  • options 选项配置(可选)

返回值: string | Buffer

示例

const fs = require('fs');
let data = fs.readFileSync('./新建文件.txt');
let data2 = fs.readFileSync('./新建文件.txt', 'utf-8');

createReadStream (文件流式读取)

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

参数说明:

  • path 文件路径
  • options 选项配置

返回值: Object

示例:

const fs = require('fs');
//创建读取流对象
let rs = fs.createReadStream('./新建文件.txt');
//每次取出 64k 数据后执行一次 chunk 回调
//绑定 data 事件
rs.on('data', chunk => {
console.log(chunk);
console.log(chunk.length);
});
//读取完毕后, 执行 end 回调,关闭流式读取
rs.on('end', () => {
console.log('读取完成')
})

概述

方法描述
readFile异步读取
readFileSync同步读取
createReadStream流式读取

复制文件

copyFile (异步复制文件)

复制文件这里的逻辑处理方法,有多种,你可以选择,先调用读取文件,再将读取到的文件调用写入方法,当然也可以直接调用 fs 的复制 Api

fs.copyFile('./散文集.txt', './文件.txt', err => {if (err) throw err;console.log('复制成功');
});

语法

fs.copyFile(src, dest[, options ], callback)

参数说明:

  • src复制源文件当前的路径
  • newPath 复制创建新文件的路径
  • options 配置参数(可选)
  • callback 操作后的回调

copyFileSync (同步复制文件)

fs.copyFileSync('./散文集.txt', './文件.txt');

参数同异步方法,只是没有回调函数

概述

方法描述
copyFile异步复制
copyFileSync同步复制

文件(夹)移动与重命名

rename(异步/同步重命名/移动)

在 Node.js 中,我们可以使用 rename (异步)renameSync (同步)来移动或重命名 文件或文件夹

  • 语法
fs.rename(oldPath, newPath, callback);  //异步更改fs.renameSync(oldPath, newPath);   //同步更改

参数说明:

  • oldPath 文件当前的路径
  • newPath 文件新的路径
  • callback 操作后的回调

示例:

const fs = require('fs');
fs.rename('./新建文件.txt', './资料/新建文件.txt', (err) => {if (err) throw err;console.log('移动完成')
});
fs.renameSync('./新建文件.txt', './资料/新建文件.txt');

补充当更改地址相对于原地址,处于同一目录,则为重命名,反之修改后不在同一目录,则为移动

概述

方法描述
rename异步重命名/移动
renameSync同步重命名/移动

文件删除

unlink 或 rm(同步/异步)

在 Node.js 中,我们可以使用 unlink rm 来删除文件

参数说明:

  • path 文件路径
  • callback 操作后的回调
fs.rm('./同步创建文件.txt', (err) => {if (err) {console.log("删除失败");return;} else {console.log("删除成功");return;}
})fs.rmSync('./同步创建文件.txt');fs.unlink('./同步创建文件.txt', (err) => {if (err) {console.log("删除失败");return;} else {console.log("删除成功");return;}
})fs.unlinkSync('./同步创建文件.txt');

概述

方法描述
rm异步删除
rmSync同步删除
unlink异步删除
unlinkSync同步删除

文件夹操作

创建文件夹

在 Node.js 中,我们可以使用 mkdir mkdirSync 来创建文件夹

  • 语法
fs.mkdir(path[, options], callback); //异步创建
fs.mkdirSync(path[, options]);   //同步创建

参数说明:

  • path 文件夹路径
  • options 选项配置( 可选 )
  • callback 操作后的回调

示例

fs.mkdir('./page', err => {if (err) throw err;console.log('创建成功');
});//递归层级异步创建
fs.mkdir('./1/2/3', {recursive: true}, err => {
if(err) throw err;
console.log('递归创建成功');
});
//递归同步创建文件夹
fs.mkdirSync('./x/y/z', {recursive: true});

读取文件夹

在 Node.js 中,我们可以使用 readdir readdirSync 来读取文件夹

  • 语法
fs.readdir(path[, options], callback); //异步读取
fs.readdirSync(path[, options]); //同步读取

参数说明:

  • path 文件夹路径
  • options 选项配置( 可选 )
  • callback 操作后的回调

示例

//异步读取
fs.readdir('./page', (err, data) => {
if(err) throw err;
console.log(data);
});
//同步读取
let data = fs.readdirSync('page');
console.log(data);

删除文件夹

在 Node.js 中,我们可以使用 rmdir rm 来删除文件夹

示例

//异步删除文件夹
fs.rmdir('./page', err => {if(err) throw err;console.log('删除成功');
});//异步递归删除文件夹
fs.rmdir('./1', {recursive: true}, err => {if(err) {console.log(err);
}
console.log('递归删除')
});//同步递归删除文件夹
fs.rmdirSync('./x', {recursive: true})//rm异步删除文件夹
fs.rm('./page', err => {if(err) throw err;console.log('删除成功');
});
//异步递归删除文件夹
fs.rm('./1', {recursive: true}, err => {if(err) {console.log(err);
}
console.log('递归删除')
});
//同步递归删除文件夹
fs.rmSync('./x', {recursive: true})

注明: 推荐使用 rmrmdir 后续可能将被移除

文件夹操作概括

方法描述
mkdir异步创建
mkdirSync同步创建
readdir异步读取文件夹
readdirSync同步读取文件夹
rmdir异步删除文件夹不推荐使用
rmdirSync同步删除文件夹不推荐使用
rm异步删除文件夹:推荐使用
rmSync同步删除文件夹推荐使用

查看资源状态

在 Node.js 中,我们可以使用 stat statSync 来查看资源的详细信息

示例:

//异步获取状态
fs.stat('./data.txt', (err, data) => {if(err) throw err;console.log(data);
});
//同步获取状态
let data = fs.statSync('./data.txt');

结果值对象结构:

  • size 文件体积
  • birthtime 创建时间
  • mtime 最后修改时间
  • sFile 检测是否为文件
  • isDirectory 检测是否为文件夹

__dirname

在这里插入图片描述

在这里插入图片描述


🚵‍♂️ 博主座右铭:向阳而生,我还在路上!
——————————————————————————————
🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!
——————————————————————————————
🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】
——————————————————————————————

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

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

相关文章

服务攻防-开发框架安全SpringBootStruts2LaravelThinkPHPCVE复现

知识点: 1、PHP-框架安全-Thinkphp&Laravel 2、J2EE-框架安全-SpringBoot&Struts2 章节点: 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&开发框架&am…

Spring Boot通过配置文件支持数据库自定义表名

直接上干货: 例如一个叫xxx的项目,yml文件里加上这段 xxxproject:db:xxxTable: xxx_dbname #自定义的数据库表名创一个Configuration类放表名和Mapper // XxxProjectAutoConfiguration.javaConfiguration MapperScan(basePackages "cn.com.xxxp…

Vue3-插槽(本质也是组件间的交流)

默认插槽 当你在父组件中,有标签需要插入子组件中显示,就需要默认插槽 具名插槽 当你在父组件中,有多个标签需要放置子组件的不同位置时,就需要具名插槽 具名-----》 v-slot:s2 作用域插槽 父组件在插槽中想要使用子组件的值&…

Less-1(sqlmap自动注入攻击)--sqli

环境准备 打开火狐浏览器,进入sqli第一关的页面 工具准备 sqlmap 参数解释 -u URL 指定目标URL进行注入测试。--dataDATA指定POST请求的数据进行注入测试--cookieCOOKIE指定用于身份验证的cookie进行注入测试-p PARAMETER指定要测试的参数--levelLEVEL设置测试的深…

你不知道的Tomcat

Tomcat基本概念 Tomcat是一个Servlet容器,也是一个web容器。我们的请求通过浏览器进入到Tomcat,Tomcat再把请求分发对应的Servlet。 Tomcat核心组件 Connector: 连接器负责处理进入Tomcat的传入连接和请求,然后将它们传递给Server服务对象中…

Qt无边框窗口拖拽和阴影

先看下效果: 说明 自定义窗口控件的无边框,窗口事件由于没有系统自带边框,无法实现拖拽拉伸等事件的处理,一种方法就是重新重写主窗口的鼠标事件,一种时通过nativeEvent事件处理。重写事件相对繁琐,我们这里推荐nativeEvent处理。注意后续我们在做win平…

MySQL知识点总结(二)——explain执行计划、SQL优化

MySQL知识点总结(二)——explain执行计划、SQL优化 explain执行计划typepossible_keyskeysextra SQL优化SQL优化的流程SQL优化技巧范围查询优化排序优化分组查询优化distinct优化分页查询优化join关联查询优化排序分页 关联查询分组 关联查询 排序in与…

手把手带你Git入门,从下载到精通,常用git命令

文章目录 Git概述什么是GitGit历史Git是什么 为什么要使用Git什么是版本控制系统 Git和SVN对比SVN集中式SVN优缺点 Git分布式Git优缺点 Git工作流程四个工作区域工作流程 Git下载与安装下载window版下载64位软件包安装Git Git基础环境配置设置用户信息查看配置信息 文件的两种状…

ES6.8.6 创建索引配置分词器、映射字段指定分词器、查询数据高亮显示分词结果(内置分词器、icu、ik、pinyin分词器)

文章目录 ES环境内置分词器,以simple分词器示例查询创建索引simple_news,修改分词器为simple插入模拟数据分词查询:返回通过分词查询到的结果、高亮分词分词匹配:写一次示例,其他分词和匹配思路基本一致第一步&#xf…

DMA 和 零拷贝技术 到 网络大文件传输优化

文章目录 DMA 控制器的发展无 DMA 控制器 IO 过程DMA 控制器 传统文件传输性能有多糟糕?如何优化文件传输性能零拷贝技术mmap writesendfileSG-DMA(The Scatter-Gather Direct Memory Access) 零拷贝技术的应用 大文件传输应该用什么方式Pag…

后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来统一包管理工具。 1.1 环境准备 1…

idea 创建 spring boot

1.创建步骤 2. 编码添加 2.1 这是自动生成的启动函数 package com.example.comxjctest4;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class Application {publi…

MySql的使用方法

一.什么是MySql MySql是一种数据库管理系统,是用来存储数据的,可以有效的管理数据,数据库的存储介质为硬盘和内存。 和文件相比,它具有以下优点: 文件存储数据是不安全的,且不方便数据的查找和管理&#xf…

【3分钟开服】幻兽帕鲁服务器一键部署保姆教程,PalWorld开服联机教程

在帕鲁的世界,你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活,也可以为你在工厂工作。你也可以将它们进行售卖,或肢解后食用。 想要部署属于自…

从零开发短视频电商 Tesseract OCR识别增强

文章目录 概要图像预处理阶段默认反转图像重新缩放二值化噪音消除膨胀/腐蚀旋转/偏移校正边框缺少边框边框太大扫描边框去除 透明度/Alpha通道 引擎处理阶段语言模型配置提高识别速度词典、单词列表和模式表格识别 使用 Tesseract OCR 的 GUI 和其他项目 原文如下: …

TypeScript实战系列之合理运用类型

目录 介绍any 和 unknownerve 的用途断言type 和 interfacedeclare 关键字的作用联合类型 和 类型守卫交叉类型 介绍 这篇主要介绍下ts 常用的基本类型和一些常用的技巧性技能 any 和 unknow any 和 unknown 是两个类型关键字,它们用于处理类型不确定或未知的情况…

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

力扣日记1.28-【回溯算法篇】93. 复原 IP 地址

力扣日记:【回溯算法篇】93. 复原 IP 地址 日期:2023.1.28 参考:代码随想录、力扣 93. 复原 IP 地址 题目描述 难度:中等 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0&…

IP地址定位技术的巧妙运用:企业网络安全的坚实防线

在当今数字时代,企业网络安全成为了至关重要的议题。面对不断增长的网络威胁,企业不得不采用创新性技术来保护其机密信息和关键系统。IP地址定位技术作为一种强大的工具,为企业提供了一种新颖而高效的网络安全保护手段。 IP地址定位技术简介 …

前端Vue v-for 的使用

目录 ​编辑 简介 使用方式 基本使用 v-for"(item, index)中item和index作用 示例 迭代对象 示例 结果 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入…