NodeJS①(fs文件系统模块)

fs文件系统模块

什么是fs文件系统模块?

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

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

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

const fs = require('fs');

读取指定文件中的内容

fs.readFile() 的语法格式

使用 fs.readFile() 方法,可以读取指定文件中的内容,语法格式如下:
在这里插入图片描述

参数解读:

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

例如:

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

结果:

[Error: ENOENT: no such file or directory, open '11.txt'] {
    
    
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'files\\11.txt'
}
-------
undefined

注意:这个回调函数有两个形参:

  • err:返回的是一个错误的对象
  • dataStr:返回的是一个成功的对象

如果读取成功,则 err 的值为 null
如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined

判断文件是否读取成功

const fs = require('fs')

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

向指定的文件中写入内容

fs.writeFile() 的语法格式

使用 fs.writeFile() 方法,可以向指定的文件中写入内容,语法格式如下:
在这里插入图片描述
参数解读:

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

注意

  • fs.writeFile() 方法只能用来创建文件,不能用来创建路径
  • 重复调用 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)

})

回调函数中会有一个形参err:
如果文件写入成功,则 err 的值等于 null
如果文件写入失败,则 err 的值等于一个 错误对象

判断文件是否写入成功

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

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

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

原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。也就是说如果你处于当前文件所在的目录并使用node命令,此时是不会出现动态的拼接错误的,但如果不在你当前的文件所在目录,在拼接的时候路径肯定会有缺失。

解决方法一

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

缺点:
移植性非常差、不利于维护

例如:

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\\code\\files\\1.txt', 'utf8', function(err, dataStr) {
    
    
  if (err) {
    
    
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
}) 

注意:在字符串中的路径,一旦出现了\就要在后面再补一个\,因为\是转义符的意思,而\才表示
如果字符串中的路径出现的是/,则不用管

解决办法二

使用__dirname来表示路径
__dirname 表示当前文件所处的目录

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

猜你喜欢

转载自blog.csdn.net/zyb18507175502/article/details/124266977