Nodejs—fs 文件系统模块

目录

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

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

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

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

3. 判断文件是否读取成功

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

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

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

3. 判断文件是否写入成功

 4. 练习题 - 考试成绩整理

1.题目要求

2.核心实现步骤

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


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)
})

(1)如果文件读取成功,则 err 的值为 null 

(2)如果文件读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined

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)
})

(err为true读取失败,false读取成功) 

(1)文件读取成功

(2)文件读取失败

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

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

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

参数解读:

参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。

参数2:必选参数,表示要写入的内容。

参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。

参数4:必选参数,文件写入完成后的回调函数。 

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

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

(1)如果文件写入成功,则 err 的值等于 null 

(2)如果文件写入失败,则 err 的值等于一个 错误对象  

3. 判断文件是否写入成功

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

代码:

// 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('文件写入成功!')
})

(err为true写入失败,false写入成功)  

(1)如果文件写入成功,返回文件写入成功!

(2)如果文件写入失败,返回文件写入失败加错误信息

 4. 练习题 - 考试成绩整理

1.题目要求:

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

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

2.核心实现步骤:

(1)导入需要的 fs 文件系统模块

(2)使用 fs.readFile() 方法,读取素材目录下的 成绩.txt 文件

(3)判断文件是否读取失败

(4)文件读取成功后,处理成绩数据

(5)将处理完成的成绩数据,调用 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.处理数据
  // 4.1 先把成绩的数据,按照空格进行分割
  const arrOld = dataStr.split(' ')
  // 输出 [ '小红=99', '小白=100', '小黄=70', '小黑=66', '小绿=88' ]
  // 4.2 循环分割后的数组,对每一项数据,进行字符串“=”替换“:”操作
  const arrNew = []
  arrOld.forEach(item => {
    arrNew.push(item.replace('=', ':'))
  })
  // 输出 [ '小红:99', '小白:100', '小黄:70', '小黑:66', '小绿:88' ]
  // 4.3 把新数组中的每一项,进行合并,得到一个新的字符串
  const newStr = arrNew.join('\r\n')  // arrNew.join拼接;\r\n回车换行
  // 输出
  // 小红:99
  // 小白:100
  // 小黄:70
  // 小黑:66
  // 小绿:88

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

 运行截图:

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

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

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

解决方案:

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

(2) 解决方案2:__dirname 表示当前文件所处的目录,从而防止路径动态拼接的问题

 代码:

const fs = require('fs')

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

//解决方案1:直接提供一个完整的文件存放路径。 移植性非常差、不利于维护
/* fs.readFile('C:\\Users\\Miriam\\Desktop\\web前端开发课程\\Nodejs\\day1\\code\\files\\1.txt', 'utf8', function(err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
}) */

// 解决方案2:__dirname 表示当前文件所处的目录
// console.log(__dirname)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端挣扎的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值