什么是fs文件系统模块
fs模块是Node.js官方提供的、用来操作文件的模块(内置的模块)。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:
1.fs.readFile()方法,用来读取指定文件中的内容
2.fs.writeFile()方法,用来向指定的文件中写入内容
如果要在JavaScript代码中,使用fs模块来操作文件,则需要使用如下方式先导入它:
const fs=require('fs')
读取指定文件中的内容
1. fs.readFile()的语法格式
使用fs.readFile()方法,可以读取指定文件的内容,语法格式如:
fs.readFile(path,[options],callback)
//参数解读
//参数1:必选参数,字符串,表示文件的路径
//参数2:可选参数,表示以什么编码格式来读取文件
//参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果
fs.readFile()的示例代码
const fs = require('fs')
//nodejs中强烈建议使用绝对路径,使用相对路径拼接的过程中,会以终端的位置进行拼接,从而导致找不到文件
fs.readFile('./files/1.txt', 'utf8', function(err, dataStr) {
if (err) {
return console.log('读取文件失败!' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
2.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)
if (err) {
return console.log('文件写入失败!' + err.message)
}
console.log('文件写入成功!')
})
示例
// 1. 导入 fs 模块
const fs = require('fs')
// 2. 调用 fs.readFile() 读取文件的内容
fs.readFile('../素材/成绩.txt', 'utf8', function(err, dataStr) {
// 3. 判断是否读取成功
if (err) {
return console.log('读取文件失败!' + err.message)
}
// console.log('读取文件成功!' + dataStr)
// 4.1 先把成绩的数据,按照空格进行分割
const arrOld = dataStr.split(' ')
// 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作
console.log(arrOld)
const arrNew = []
arrOld.forEach(item=>{
arrNew.push(item.replace('=',': '))
})
// 4.3 把新数组中的每一项,进行合并,得到一个新的字符串
// \r\n代表回车换行
const newStr = arrNew.join('\r\n')
// 5. 调用 fs.writeFile() 方法,把处理完毕的成绩,写入到新文件中
fs.writeFile('./files/成绩-ok.txt', newStr, function(err) {
if (err) {
return console.log('写入文件失败!' + err.message)
}
console.log('成绩写入成功!')
})
})
路径动态拼接问题
出现路径拼接错误的问题,是因为提供了 ./ 或 …/ 开头的相对路径
如果要解决这个问题,可以直接提供一个完整的文件存放路径就行
// __dirname 表示当前文件所处的目录
console.log(__dirname)
通过dirname的拼接解决路径拼接错误的问题
//__dirname为当前文件所处的路径
fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, dataStr) {
if (err) {
return console.log('读取文件失败!' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
path路径模块(在nodejs中一定要使用绝对路径)
(使用绝对路径也会因为操作系统环境的不同,导致路径名格式的变化,因此推荐使用path.join()方法拼接,join方法会使用特定的平台分割符,作为界定符)
1.path.join()方法,可以把多个路径片段拼接成完整路径的字符串,语法格式如下:
//引入path模块
const path=require('path')
// 注意: ../ 会抵消前面的路径
const pathStr = path.join('/a', '/b/c', '../../', './d', 'e')
// ..在路径拼接的过程中会使_dirname转换到当前目录的上一级目录
console.log(pathStr)
// \a\b\d\e
注意:今后凡是涉及到路径拼接的操作,都要使用path.join()方法进行处理。不要直接使用+进行字符串的拼接
2.互取路径中的文件名 path.basename()方法
const path = require('path')
// 定义文件的存放路径
const fpath = '/a/b/c/index.html'
// const fullName = path.basename(fpath)
// console.log(fullName)
// index.html
//去除后缀名
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt)
//index
3.获取路径中文件中的扩展名 path.extname()
// 这是文件的存放路径
const fpath = '/a/b/c/index.html'
const fext = path.extname(fpath)
console.log(fext)
// .html