3>Node 文件系统模块、路径模块

32 阅读3分钟

fs 文件系统模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。

1:导入 fs 模块

const fs = require('fs')

2:使用 fs 模块

fs.readFile('filePath'[, 'options'], callback)

使用 fs.readFile() 方法,可以读取指定文件中的内容,参数如下:
path:必选参数,字符串,表示文件的路径。
options:可选参数,表示以什么编码格式来读取文件。通常是utf-8
callback:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
> callback有两个形参,一个是err,一个是dataStr
>> err的值是错误对象,实际开发中常用 if(err) 判断是否读取成功
>> data的值是从文件中读取到的字符串中的内容
>>> 如果读取没错,则err的值是nll,data的值是从文件中读取到的字符串中的内容
>>> 如果读取有误,err存放的是错误对象的信息;data是undefined

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

// 2. 调用 fs.readFile() 方法读取文件
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
    // 2.1 数据处理
    if (err) {
        // err.message是错误信息
        return console.log('读取文件失败!' + err.message)
    }
    console.log('读取文件成功!' + dataStr)
})

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

使用 fs.writeFile() 方法,可以向指定的文件中写入内容,参数如下:
> data:必选参数,表示要写入的内容。
注意:
> callback只有一个形参,是err,表示是否写入成功,同readFile
> 如果文件不存在,会创建文件并写入数据
> 数据不是追加,是覆盖

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

fs.writeFile('./files/3.txt', 'ok123', function(err) {
  // 数据处理
  if (err) {
    return console.log('文件写入失败!' + err.message)
  }
  console.log('文件写入成功!')
})

path 路径模块

path 模块是Node.js 官方提供的、用来处理路径的模块。

1:导入 path 模块

const path = require('path')

解决的问题

代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径
但在终端会执行node时,所在的目录会有所变化,故此会导致被操作文件的路径有误
而使用绝对路径又降低了文件的移植性

解决办法

__dirname 返回的是node所在的目录,而不是执行node时所在的目录
使用 let pathA = path.join(__dirname, '相对定位')

string || path.join([...paths]) 路径拼接

使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串
解决了多个路径片段使用字符串拼接时,存在的./、../无法处理的问题
示例 let pathA = path.join('/a', '/b/c', '../../', './d', 'e')
今后凡是涉及到路径拼接的操作,都要使用 path.join() 方法进行处理。不要直接使用 + 进行字符串的拼接

string || path.basename('path'[, 'ext'])

可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名
path: 必选参数,表示一个路径的字符串
ext:表示路径最后一部分要去除结尾ext字符串
> 常用来写文件扩展名,输出的字符串就是文件的名称
返回值: 表示路径中的最后一部分的字符串
console.log(path.basename('b/c/index.html')) // index.html
console.log(path.basename('b/c/index.html', '.html')) //index

string || path.extname('path')

可以获取路径中的扩展名部分
path: 必选参数,表示一个路径的字符串
返回得到的扩展名字符串
console.log(path.extname('b/c/index.html')) //.html