Node中fs文件系统
fs 文件系统
fs 文件系统模块
-
fs 模块是
Node.js
官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求fs.readFile()
方法,用来读取指定文件中的内容fs.writeFile()
方法,用来向指定的文件中写入内容
-
如果要在
JavaScript
代码中,使用fs
模块来操作文件,则需要使用如下的方式先导入它const fs = require('fs')
读取指定文件中的内容
fs.readFile() 的语法格式
使用 fs.readFile()
方法,可以读取指定文件中的内容,语法格式
fs.readFile(path[, options], callback)
参数解读:
- 参数1:必选参数,字符串,表示文件的路径
- 参数2:可选参数,表示以什么编码格式来读取文件
- 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果
fs.readFile() 的示例代码
// 1. 导入 fs 模块
const fs = require('fs')
// 2. 调用 fs.readFile() 方法读取文件
// 参数 1: 读取文件的存放路径
// 参数 2: 读取文件时候的编码格式,一般默认是 utf8
// 参数 3: 回调函数,拿到读取失败和成功的结果, err 以及 data
fs.readFile('./Tom.txt', 'utf8', function (err, data) {
// 3. err
// 如果读取成功,则 err 的值为 null
// 如果读取失败,则 err 的值为错误对象, data 的值为 undefined
console.log(err)
// 4. data 打印成功的结果
console.log(data)
})
判断文件是否读取成功
可以判断 err 对象是否为 null,从而知晓文件读取的结果
- 结果是 null ,说明文件读取成功
- 如果不为 null,说明文件读取失败
const fs = require('fs')
fs.readFile('./Tom.txt', 'utf8', function (err, data) {
// 判断 err 对象是否为 null
if (err) {
return console.log('文件读取失败:', err.message)
}
console.log('文件读取成功,内容是:', data)
})
向指定的文件中写入内容
fs.writeFile() 的语法格式
使用 fs.writeFile()
方法,可以向指定的文件中写入内容
fs.writeFile(file, data[, options], callback)
参数解读:
- 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
- 参数2:必选参数,表示要写入的内容
- 参数3:可选参数,表示以什么格式写入文件内容,默认值是
utf8
- 参数4:必选参数,文件写入完成后的回调函数
fs.writeFile() 的示例代码
// 1. 导入 fs 文件系统模块
const fs = require('fs')
// 2. 调用 fs.writeFile() 方法,写入文件的内容
// 参数 1:表示文件的存放路径
// 参数 2:表示要写入的内容
// 参数 3:回调函数
fs.writeFile('./Tom.txt', ' Jerry', function (err) {
// 3. err
// 3.1 如果文件写入成功,则 err 的值等于 null
// 3.2 如果文件写入失败,则 err 的值等于一个错误对象
console.log(err)
})
判断文件是否写入成功
可以判断 err 对象是否为 null,从而知晓文件写入的结果
const fs = require('fs')
fs.writeFile('./Tom.txt', 'Tom And Jerry', function (err) {
if (err) {
return console.log('文件写入失败', err.message)
}
console.log('文件写入成功')
})
fs 整理考试成绩案例
需求分析
使用 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.rendFile() 读取文件的内容 fs.readFile('./成绩.txt', 'utf8', function (err, data) { // 3. 判断是否读取成功 if (err) { return console.log('读取文件失败!', err.message) } console.log('读取文件成功', data) })
-
处理成绩
// 1. 导入 fs 文件系统 const fs = require('fs') // 2.调用 fs.rendFile() 读取文件的内容 fs.readFile('./成绩.txt', 'utf8', function (err, data) { // 3. 判断是否读取成功 if (err) { return console.log('读取文件失败!', err.message) } // 4.1 将成绩按照空格进行分割 const oldArr = data.split(' ') // 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作 const newArr = [] oldArr.forEach(item => { // console.log(item) newArr.push(item.replace('=', ': ')) }) // 4.3 将新数组中的每一项,进行合并,得到一个新的字符串 const newStr= newArr.join('\r\n') console.log(newStr) })
-
将整理好的成绩写入到新文件
// 1. 导入 fs 文件系统 const fs = require('fs') // 2.调用 fs.rendFile() 读取文件的内容 fs.readFile('./成绩.txt', 'utf8', function (err, data) { // 3. 判断是否读取成功 if (err) { return console.log('读取文件失败!', err.message) } // 4.1 将成绩按照空格进行分割 const oldArr = data.split(' ') // 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作 const newArr = [] oldArr.forEach(item => { // console.log(item) newArr.push(item.replace('=', ': ')) }) // 4.3 将新数组中的每一项,进行合并,得到一个新的字符串 const newStr= newArr.join('\r\n') // console.log(newStr) fs.writeFile('./成绩-ok.txt', newStr, function (err) { if (err) { return console.log('文件写入失败' + err.message) } console.log('成绩写入成功') }) })
fs 路径问题
fs 模块路径动态拼接的问题
在使用 fs
模块操作文件时,如果提供的操作路径是以 ./
或 ../
开头的相对路径时,很容易出现路径动态拼接错误的问题
原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径
解决方案:在使用 fs
模块操作文件时,直接提供完整的路径,不要提供 ./
或 ../
开头的相对路径,从而防止路径动态拼接的问题
使用完整路径替换相对路径
使用完整路径替换相对路径,但这种写法移植性比较差,不利于后期的维护
const fs = require('fs')
fs.readFile('./Tom.txt', 'utf8', function (err, data) {
// 判断 err 对象是否为 null
if (err) {
return console.log('文件读取失败:', err.message)
}
console.log('文件读取成功,内容是:', data)
})
使用 __dirname 解决路径拼接问题
__dirname
属性 Node
给提供的一个全局的属性,表示当前文件所处的目录
const fs = require('fs')
// __dirname 属性解决路径拼接问题
fs.readFile(__dirname + '/Tom.txt', 'utf8', function (err, data) {
// 判断 err 对象是否为 null
if (err) {
return console.log('文件读取失败:', err.message)
}
console.log('文件读取成功,内容是:', data)
})