fs文件系统模块

562 阅读3分钟

什么是fs文件系统模块

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

  • fs.readFile()方法, 用来读取指定文件中内容
  • fs.writeFile()方法, 用来向指定的文件中写入内容

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

const fs = require('fs')

读取指定文件中的内容

fs.readFile()的语法格式

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

fs.readFile(path[, options], callback)

参数解读:

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

fs.readFile的示例代码

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

const fs = require('fs')
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
    console.log(err)
    console.log(dataStr)
})
// 如果读取成功, err结果是null, 否则, err为错误对象, dataStr为undefined
// null
// 111

判断文件是否读取成功

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

const fs = require('fs')
fs.readFile('./files/11.txt', 'utf8', function(err, result) {
    if(err) {
        return console.log('文件读取失败', err.message)
    }
    console.log('文件读取成功, 内容是', result)
})    

向指定的文件中写入内容

fs.writeFile()语法格式

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

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

参数解读:

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

fs.writeFile的示例代码

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

const fs = require('fs')
fs.writeFile('./files/2.txt', 'hello node.js', function(err) {
    console.log(err)
})

// 如果文件写入成功, err的值为null
// 如果文件写入失败, err的值为错误对象

判断文件是否写入成功

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


const fs = require('fs')
fs.writeFile('./files/2.txt', 'hello writeFile', function(err){
    if(err) {
        return console.log(‘文件写入失败’, err.message)
    }
    
   console.log('文件写入success ')
})

练习- 考试成绩整理

核心实现步骤

  1. 导入需要的fs文件系统模块
  2. 使用fs.readFile方法读取素材目录下的成绩.txt文件
  3. 判断文件是否读取成功
  4. 文件读取成功够,处理成绩数据
  5. 将处理完成的数据,调用fs.writeFile()写入到新文件“成绩-ok.txt”中

处理前文件内容:

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

处理后文件内容:

1. 小红:99
2. 小白:100
3. 小黑: 66
4. 小绿:88

实现代码

// 1. 导入fs模块
const fs = require('fs')
// 2. 调用fs.readFile()读取文件内容
fs.readFile('./素材/成绩.txt', 'utf8', function(err, data) {
// 3. 判断是否读取成功
    if(err) {
        return console.log('文件读取失败', err.message)
    }
    consolog.log('文件读取成功', data)
// 4. 文件数据处理
    const oldArr = data.split(' ')
    const newData = oldArr.map((item, index) => {
        return `${index}. ${item.replace('=', ':')}`
    })
    const res = newData.join('\r\n')
 // 5. 调用fs.writeFile()方法把处理好的数据写入新文件
    fs.writeFile('./素材/成绩-ok.txt', res, function(err){
        if(err) {
            return console.log('文件写入失败', err.message)
        }
        consol.log('文件写入成功')
    })
})

fs模块-路径动态拼接

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

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

解决: 直接提供一个完整的文件存在路径

__dirname表示当前文件所处的目录

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

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情