node基础 fs(文件系统模块)
node.js 引入fs模块
const fs = require('fs')
1. fs.stat() 检测是文件还是目录
语法格式:fs.stat(path, callback)
stat 参数说明:
- 第一个path是文件路径
- 第二个callback是回调函数,fs.stat(path)执行后,会将stats类的实例返回给其回调函数,例子中分别使用 isFile 和 isDirectory 来判断当前操作的是文件还是目录,取值为 true 和 false
const fs = require('fs')
//判断 ./test/text.txt 是文件还是目录
fs.stat('./test/text.txt', (err, dataStr) => {
if (err) {
return console.log('获取失败:'+ err.message)
}
console.log(`是文件:${dataStr.isFile()}`)
console.log(`是目录:${dataStr.isDirectory()}`)
})
2. fs.writeFile 写入文件 (若该文件已存在则会覆盖该文件)
语法格式: fs.writeFile(file, data[, options], callback)
writeFile 参数说明:
- file 文件名或文件描述符
- data 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象
- options 是一个对象,包含以下参数
- encoding(String | null) 默认值 utf8
- mode 默认值 0666
- flag 默认值 w
- callback 回调函数,返回错误信息参数(err)
const fs = require('fs')
// 写入文件
fs.writeFile('./test/text.txt', 'hello', 'utf8', (err) => {
if (err) {
return console.log('写入错误:' + err.message)
}
console.log('写入成功');
})
3. fs.readFile 读取文件
语法格式: fs.readFile(path[, options], callback)
readFile 参数说明:
- path 文件的路径
- options 是一个可选参数, 编码格式 一般默认utf8
- callback 回调函数,返回读取失败(err)和成功(dataStr)的结果
const fs = require('fs')
// 读取文件
fs.readFile('./test/text.txt', 'utf8', (err, dataStr) => {
if (err) {
return console.log('读取错误:' + err.message)
}
console.log('读取成功:' + dataStr)
})
4. fs.mkdir 创建目录 (如果目录已存在,就会报错)
语法格式:fs.mkdir(path[, options], callback)
mkdir 参数说明:
- file 文件路径
- data 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象
- options 是一个对象,包含以下参数
- recursive 是否以递归的方式创建目录,默认为 false
- mode 设置目录权限,默认为 0777
- callback 回调函数, 返回错误信息(err)
const fs = require('fs')
fs.mkdir('./test', (err) => {
if (err) {
return console.log('创建目录失败:' + err.message)
}
console.log('创建目录成功')
})
5. fs.readdir 读取目录
语法格式:fs.readdir(path, callback)
readdir 参数说明:
- path 文件路径
- callback 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表
const fs = require('fs')
// 查看 ./test 目录
fs.readdir("./test", (err, files) => {
if (err) {
return console.log('读取目录失败:' + err.message)
}
console.log(files) // 返回的是一个数组 [ 'text.txt' ]
})
6. fs.rename 重命名
语法格式:fs.rename(oldPath, newPath, callback)
rename参数说明:
- oldPath 原文件路径及名称
- newPath 新命名文件路径及名称
- callback 回调函数,回调函数返回错误信息(err)
const fs = require('fs')
// 重命名
fs.rename('./test/text.txt', './test/text1.txt', (err) => {
if (err) {
return console.log('重命名失败' + err.message)
}
console.log('重命名成功')
})
路径动态拼接的问题
在使用 fs 模块操作文件时,如果提供的操作路径是以./或../开头的相对路径时,很容易出现路径动态拼接错误的问题
原因:代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径。
解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供./或../开头的相对路径,从而防止路径动态拼接错误的问题。
const fs = require('fs')
// 当前文件路径: D:\project\node\node_api\base\fs.js
// 在base目录下执行node .\fs.js 命令是不会报错的
// 如果我们将目录退一级如在node_api下执行node .\base\fs.js 就会报错
// 解决方案是提供一个完整的文件存放路径
// __dirname 表示当前文件所在的目录
fs.readFile(__dirname + '/test/text.txt', 'utf8', (err, dataStr) => {
if (err) {
return console.log('读取错误:' + err.message)
}
console.log('读取成功:' + dataStr)
})