什么是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 ')
})
练习- 考试成绩整理
核心实现步骤
- 导入需要的fs文件系统模块
- 使用fs.readFile方法读取素材目录下的成绩.txt文件
- 判断文件是否读取成功
- 文件读取成功够,处理成绩数据
- 将处理完成的数据,调用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 天,点击查看活动详情