fs 文件系统模块

news2024/9/28 7:18:58

1、什么是 fs 文件系统模块

        fs 模块Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

方法名

说明

fs.readFile()

用来读取指定文件中的内容

fs.writeFile()

用来向指定的文件中写入内容

如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:

2、读取指定文件中的内容

(1)fs.readFile() 的语法格式

使用 fs.readFile() 方法,可以读取指定文件中的内容,语法格式如下:

参数解读:

  • 参数1:必选参,字符串,表示文件的路径。
  • 参数2:可选参数,表示以什么编码格式来读取文件。
  • 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。

(2)fs.readFile() 的示例代码

utf8 的编码格式,读取指定文件的内容,并打印 err dataStr 的值:

// 1. 导入 fs 模块,来操作文件
const fs = require('fs')

// 2. 调用 fs.readFile() 方法读取文件
//    参数1:读取文件的存放路径
//    参数2:读取文件时候采用的编码格式,一般默认指定 utf8
//    参数3:回调函数,拿到读取失败和成功的结果  err  dataStr
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
  // 2.1 打印失败的结果
  // 如果读取成功,则 err 的值为 null
  // 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined
  console.log(err)
  console.log('-------')
  // 2.2 打印成功的结果
  console.log(dataStr)
})

(3)判断文件是否读取成功

可以判断 err 对象是否为 null,从而知晓文件读取的结果:

const fs = require('fs')

fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
})

3、向指定的文件中写入内容

(1)fs.writeFile() 的语法格式

使用 fs.writeFile() 方法,可以向指定的文件中写入内容,语法格式如下:

参数解读:

  • 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
  • 参数2:必选参数,表示要写入的内容。
  • 参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
  • 参数4:必选参数,文件写入完成后的回调函数。 

(2)fs.writeFile() 的示例代码

向指定的文件路径中,写入文件内容:

// 1. 导入 fs 文件系统模块
const fs = require('fs')

// 2. 调用 fs.writeFile() 方法,写入文件的内容
//    参数1:表示文件的存放路径
//    参数2:表示要写入的内容
//    参数3:回调函数
fs.writeFile('./files/3.txt', 'ok123', function(err) {
  // 2.1 如果文件写入成功,则 err 的值等于 null
  // 2.2 如果文件写入失败,则 err 的值等于一个 错误对象
  // console.log(err)

  if (err) {
    return console.log('文件写入失败!' + err.message)
  }
  console.log('文件写入成功!')
})

(3)判断文件是否写入成功

可以判断 err 对象是否为 null,从而知晓文件写入的结果:

// 1. 导入 fs 模块
const fs = require('fs')

// 2. 调用 fs.readFile() 读取文件的内容
fs.readFile('../素材/成绩.txt', 'utf8', function(err, dataStr) {
  // 3. 判断是否读取成功
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)

4、练习 - 考试成绩整理

使用 fs 文件系统模块,将素材目录下成绩.txt文件中的考试数据,整理到成绩-ok.txt文件中。

整理前,成绩.txt文件中的数据格式如下:

小红=99 小白=100 小黄=70 小黑=66 小绿=88

整理完成之后,希望得到的成绩-ok.txt文件中的数据格式如下:

小红:99
小白:100
小黄:70
小黑:66
小绿:88

核心实现步骤

  • 导入需要的 fs 文件系统模块
  • 使用 fs.readFile() 方法,读取素材目录下的 成绩.txt 文件
  • 判断文件是否读取失败
  • 文件读取成功后,处理成绩数据
  • 将处理完成的成绩数据,调用 fs.writeFile() 方法,写入到新文件 成绩-ok.txt 中
// 1. 导入 fs 模块
const fs = require('fs')

// 2. 调用 fs.readFile() 读取文件的内容
fs.readFile('../素材/成绩.txt', 'utf8', function(err, dataStr) {
  // 3. 判断是否读取成功
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  // console.log('读取文件成功!' + dataStr)

  // 4.1 先把成绩的数据,按照空格进行分割
  const arrOld = dataStr.split(' ')
  // 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作
  const arrNew = []
  arrOld.forEach(item => {
    arrNew.push(item.replace('=', ':'))
  })
  // 4.3 把新数组中的每一项,进行合并,得到一个新的字符串
  const newStr = arrNew.join('\r\n')

  // 5. 调用 fs.writeFile() 方法,把处理完毕的成绩,写入到新文件中
  fs.writeFile('./files/成绩-ok.txt', newStr, function(err) {
    if (err) {
      return console.log('写入文件失败!' + err.message)
    }
    console.log('成绩写入成功!')
  })
})

5、fs 模块 - 路径动态拼接的问题

在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ ../ 开头的相对路径时,很容易出现路径动态拼接错误的问题。

原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。

解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ ../ 开头的相对路径,从而防止路径动态拼接的问题。

__dirname:表示当前文件所处的目录,这是node给我们提供的一个函数

const fs = require('fs')

// 出现路径拼接错误的问题,是因为提供了 ./ 或 ../ 开头的相对路径
// 如果要解决这个问题,可以直接提供一个完整的文件存放路径就行
/* fs.readFile('./files/1.txt', 'utf8', function(err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
}) */

// 移植性非常差、不利于维护
/* fs.readFile('C:\\Users\\escook\\Desktop\\Node.js基础\\day1\\code\\files\\1.txt', 'utf8', function(err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
}) */

// __dirname 表示当前文件所处的目录
// console.log(__dirname)

fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
})

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

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

相关文章

webflux整合swagger教程V2版

1. yml文件配置 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>2.1.0.RELEASE</version></dependency><!--数据库开始--&…

python @classmethod

1..什么是classmethod classmethod是用来指定一个类的方法为类方法 长的像下面这个样子 1 2 3 class cc: classmethod def f(cls, arg1, arg2, ...): ... cls通常用作类方法的第一参数 跟self有点类似&#xff08; __init__里面的slef通常用作实例方法的第一参数)。…

vue开发环境配置Visual Studio Code配置和安装教程

方便前端vue开发&#xff0c;使用vs code插件安装详细教程&#xff0c;关于vs code可以网络上相关的教程&#xff0c;插件安装如下图所示&#xff0c;大家常用的插件可再分享&#xff0c;与我联系。 1 安装Vue语法高亮显示插件&#xff1a;vetur 2 安装vue语法提示插件&#xf…

小孩上了半年小学,针对老师的评语总结,如何对症优化教育培养策略?chatGPT搜了一下,AI震惊了我

评语 班主任评语&#xff1a; 你是一个性格内向、聪明伶俐的男孩。平时能按时完成老师布置的作业&#xff0c;学习认真&#xff0c;成绩优良&#xff0c;做事认真。但有时自己的事情还不能自己完成&#xff0c;希望你以后可以独立起来&#xff0c;遇到问题多想办法&…

高性能网关基石——OpenResty

什么是 OpenRestyOpenResty 一个基于 Nginx 的高性能 Web 平台&#xff0c;能够方便地搭建处理超高并发的动态 Web 应用、 Web 服务和动态网关。例如有名的 Kong 网关和国产新秀 ApiSIX 网关都是基于 OpenResty 来进行打造的。OpenResty 通过实现 ngx_lua 和 stream_lua 等 Ngi…

Nmap工具使用

Nmap工具使用1.Nmap简介1.1.Nmap介绍1.2.Nmap功能介绍1.3.Nmap下载1.4.Nmap端口状态2.Nmap基本使用2.1.Nmap基础扫描2.2.Nmap基础扫描多个目标2.3.Nmap详细扫描输出2.4.Nmap指定端口扫描2.4.1.单端口扫描2.4.2.端口范围扫描2.4.3.端口组合扫描2.5.Nmap扫描排除2.5.1.排除一个主…

强大的ANTLR4(6)--设计语法

四种抽象的计算机语言模式&#xff1a; 1&#xff09;序列&#xff1a;一列元素&#xff0c;数组 2&#xff09;选择&#xff1a;在多个可选方案中做出选择 3&#xff09;词法符号依赖&#xff1a;例如左右括号匹配 4&#xff09;嵌套结构&#xff1a;一种自相似的语言结构。 …

lambda表达式入门

一、函数式编程思想 1 概念 面向对象思想需要关注用什么对象完成什么时期&#xff0c;而函数式编程思想更类似于我们数学中的函数&#xff0c;它主要关注的是对数据进行了什么操作 2 优点 代码简洁&#xff0c;开发快速接近自然语言&#xff0c;易于理解易于"并发编程…

计算机网络——BGP协议

BGP协议 和谁交换&#xff1a;与其他AS的邻站BGP发言人交换信息。 交换什么&#xff1a;交换网络可达性信息 多久交换一次&#xff1a;发生变化时更新有变化的部分 一般来说两个网络都是由一个BGP发言人连接的。 BGP协议交换信息的过程 BGP协议所交换的网络可达性的信息就…

Haproxy 代理后端服务

参考 http://www.haproxy.org HAProxy GitHub 目录 一、Haproxy环境准备 1、Haproxy简介 1.1、haproxy原理 1.2、Haproxy优点 2、在线apt安装 二、使用Haproxy 1、基本脚本结构示例 2、配置反向代理 3、验证haproxy 3.1、重启服务 3.2、访问后台管理 3.3、访问…

Linux下用gdb定位Qt程序崩溃位置(systemd-coredump)

目录1. systemd-coredump2. 用gdb定位崩溃位置Linux提供了systemd-coredump服务&#xff0c;可以配合gdb来定位到程序崩溃位置&#xff0c;下面介绍它们的用法。1. systemd-coredump systemd-coredump的简单介绍&#xff1a; systemd-coredump能从操作系统内核中获取内存转储&…

IDEA2022.1创建Maven web项目 + SpringMVC入门学习

SpingMVC 入门案例 文章目录SpingMVC 入门案例项目的结构1.导入SpringMVC和Servlet依赖2.创建SpringMVC控制器类&#xff08;等同Servlet&#xff09;3.初始化SpingMVC环境&#xff08;同Spring环境&#xff09;&#xff0c;设定SpringMVC加载对应的bean4.创建web容器启动类&am…

MWORKS.Sysplorer基于数据字典管理模型参数应用案例

1 引言 在面向微控制器的建模过程中&#xff0c;控制算法是可以复用到不同型号的同类产品中的。为了提高控制算法的可移植性&#xff0c;需要将模型与数据分开管理。如果不将模型与数据分开管理&#xff0c;直接将数据保存到模型中&#xff0c;即使在非批产的工程化应用或者小…

11.前端笔记-Bootstrap前端框架

1.Bootstrap简介 框架&#xff1a; 就是一台架构&#xff0c;有较为完整的网页功能解决方案&#xff0c;而且控制权在框架本身&#xff0c;有预制样式库、组件和插件。使用者要按照框架规定的规范进行开发 参考&#xff1a; 中文官网&#xff1a;http://www.bootcss.com 官…

Spring中实用的11个扩展点

我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。 没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。 除此之外,我们在使用spring的过程中,有没有发现它的扩展能力非常强。由于这个优势的存在,让…

【Vue2+Element ui通用后台】面包屑和tag功能

文章目录面包屑tag面包屑 Element ui 面包屑&#xff1a;显示当前页面的路径&#xff0c;快速返回之前的任意页面&#xff0c;完成效果如下&#xff1a; 我们之前把头部的代码封装到了 CommonHeader.vue 中&#xff0c;面包屑部分直接写死了一个首页&#xff0c;我们可以把官…

C++:STL:常用算法(下):拷贝,算术,集合算法

一&#xff1a;常用拷贝和替换算法 学习目标&#xff1a;掌握常用的拷贝和替换算法 算法简介&#xff1a; copy // 容器内指定范围的元素拷贝到另一容器中 replace // 将容器内指定范围的旧元素修改为新元素 replace_if // 容器内指定范围满足条件的元素替换为新元素…

2023-01-04 Echarts学习笔记(三) Echarts的实际应用场景:在网页中插入Echarts的折线图,饼图和柱状图

文章目录零.准备和说明1.最终页面效果2.资源地址一.网页布局1.网页结构分析2.其他准备3.完整代码index.htmlcss/index.scss4.效果5.知识点(待补充)contentzoomz-index&::afterkeyframe二.插入Echarts图表零.准备和说明 1.最终页面效果 主要分为两个部分,一是先进行常规页面…

BeautifulSoup深入学习

BeautifulSoup深入学习 简介 BeautifulSoup是python的一个库&#xff0c;其提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱&#xff0c;通过解析文档为用户提供需要抓取的数据&#xff0c;因为简单&#xff0c;所以不需要多少代码就可…

使用Hog特征进行字母和数字的分类

目的&#xff1a;使用字母数字的二值图像&#xff0c;进行识别&#xff1a; 整体思路&#xff1a; 1&#xff09;对图像进行预处理&#xff1b; 对收集的单个字符进行二值化&#xff0c;进行数据均衡&#xff0c;并且将所有的字符图片直接resize为20*20&#xff08;有过进行…