Node入门系列-fs、path 模块的使用(1)
一、fs文件系统模块
fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
fs.readFile()
方法,用来读取指定文件中的内容
fs.writeFile()
方法,用来向指定的文件中写入内容
1. 使用 readFile() 方法读取文件
语法格式 fs.readFile(path[, options], callback)
// 导入 fs 模块,来操作文件const fs = require('fs')
// 调用 fs.readFile(文件路径, 读取文件采用的编码格式, 回调函数) 方法来读取文件// 如果读取成功,err 值为错误对象,dataStr 值为 undefined// 如果读取成功:err 值为 null,dataStr 值为文件的值fs.readFile('./files/11.txt', 'utf8', (err, dataStr) => { console.log('读取失败的结果:' + err); // null console.log('--------------------'); console.log('读取成功的结果:' + dataStr); // 文件的值})
参数解读:
参数1:必选参数,字符串,表示文件的路径
参数2:可选参数,表示以什么编码格式来读取文件
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
1.1 判断文件是否读取成功
可以判断 err 对象是否为 null,从而知晓文件读取的结果
const fs = require('fs')
fs.readFile('./files/1.txt', 'utf8', (err, dataStr) => { if (err) { console.log(err); return console.log('文件读取失败!', err.message); } console.log('文件读取成功!', dataStr);})
2. 使用 writeFile() 方法写入文件
语法格式 fs.writeFile(file, data[, options], callback)
const fs = require('fs')
// 调用 fs.writeFile(文件路径, 写入的内容, 回调函数) 方法来写入文件// 写入成功:err 值为 null// 写入失败:err 值为错误对象fs.writeFile('./files/3.txt', 'ok123', (err) => {
// 判断文件是否写入成功 if (err) { console.log('文件写入失败!', err.message); }
console.log('文件写入成功!'+ err);
})
参数解读:
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2:必选参数,表示要写入的内容
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8
参数4:必选参数,文件写入完成后的回调函数
2.1 演示路径的问题
const fs = require('fs')
// 出现路径拼接错误的问题,是因为提供了 ./ 或 ../ 开头的相对路径// 解决方案:直接提供完整的路径(绝对路径)// fs.readFile('./files/1.txt', 'utf8', (err, data) => {// if (err) return console.log('文件读取失败!' + err.message)
// console.log('文件读取成功! \n' + data);// })
// 缺点:这种方案移植性非常差,不利于维护// fs.readFile('E:\\Visual Studio Code\\web\\3.Node.js\\day1\\code\\files\\1.txt', 'utf8', (err, data) => {// if (err) return console.log('文件读取失败!' + err.message)
// console.log('文件读取成功! \n' + data);// })
// 完美解决方案:使用 __dirname 表示当前文件所处的目录fs.readFile(__dirname + '/files/1.txt', 'utf8', (err, data) => { if (err) return console.log('文件读取失败!' + err.message)
console.log('文件读取成功! \n' + data);})
2.2 路径动态拼接的问题
在使用 fs 模块操作文件时,如果提供的操作路径是以./
或../
开头的相对路径时,很容易出现路径动态拼接错误的问题。
原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。
解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./
或 ../
开头的相对路径,从而防止路径动态拼接的问题。
// 不要使用 ./ 或 ../ 这样的相对路径fs.readFile('./files/1.txt', 'utf8', (err, data) => { if (err) return console.log('文件读取失败!' + err.message)
console.log('文件读取成功! \n' + data);})
// __dirname 表示当前文件所处的目录fs.readFile(__dirname + '/files/1.txt', 'utf8', (err, data) => { if (err) return console.log('文件读取失败!' + err.message)
console.log('文件读取成功! \n' + data);})
二、path 路径模块
path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理 需求
path.join()
方法,用来将多个路径片段拼接成一个完整的路径字符串
path.basename()
方法,用来从路径字符串中,将文件名解析出来
3. 使用 path.join() 拼接路径
语法格式 path.join[...paths]
const fs = require('fs')// 先导入 path 模块const path = require('path')/** * path.join(): 用来拼接路径 * 凡是路径的拼接,都应该使用 path.join() */
// 注意:../ 会抵消前面的一层路径const pathStr = path.join('/a', '/b/c', '../', './d', 'e')console.log(pathStr); // \a\b\d\e
// 加号拼接,文件路径不能加 点 . !!// fs.readFile(__dirname + '/files/1.txt')
// 使用 path.join() 方法拼接,加不加点都可以fs.readFile(path.join(__dirname, './files/1.txt'), 'utf-8', (err, data) => { if(err) return console.log(err.message); console.log(data);})
参数解读:..paths <string> 路径片段的序列,返回值: <string>
4. 使用 path.basename() 获取路径中的文件名
语法格式 path.basename(path[, ext])
const path = require('path')
/** * path.basename() :获取给定路径中的文件名 */
// 定义文件的存放路径const fpath = '/a/b/c/index.html'
// 1. 获取文件名// const fullName = path.basename(fpath)// console.log(fullName); // index.html
// 2. 获取文件名(不包含文件扩展名)const nameWithoutExt = path.basename(fpath, '.html')console.log(nameWithoutExt); // index
参数解读:
path<string>
必选参数,表示一个路径的字符串ext <string>
可选参数,表示文件扩展名- 返回:
<string>
表示路径中的最后一部分
5. 使用 path.extname() 方法获取路径中的扩展名部分
语法格式 path.extname(path)
const path = require('path')
/** * path.extname() :获取给定路径中文件的扩展名 */
const fpath = '/z/x/c/index.html'
const fext = path.extname(fpath)console.log(fext); // .html
参数解读:
path <string>
必选参数,表示一个路径的字符串- 返回:
<string>
返回得到的扩展名字符串
每文一句:路漫漫其修道远,吾将上下而求索。