NodeJs之fs模块
一、定义:
fs模块可以实现与硬盘的交互。例如:文件的创建、删除、重命名、移动;文件内容的写入、读取;文件夹的操作。
二、引入 fs 模块:
const fs = require('fs')
三、文件写入:
1、异步写入:writeFile
① 语法:
fs.writeFile(file,data[, options], callback)
② 参数说明:
(1)file:指定目标文件的路径或标识符。
类型:字符串、Buffer、URL 或文件描述符(整数)
如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。
(2)data:待写入的数据。
类型:字符串、Buffer、TypedArray、DataView
(3)options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
utf8 - 作用:指定文本数据的编码格式,支持
ascii、base64、hex等
flag:
- 默认值:
w(覆盖写入,文件不存在则创建) - 其它值:
a:追加内容(文件不存在则创建)
wx:写入失败(若文件已存在)
(4)callback:回调函数。
写入完成后调用,会接收一个参数,写入成功,该参数为
null;写入失败,该参数为错误对象
③ 示例:
const fs = require('fs')
// 写入文件时建立连接,写入完毕断开连接
fs.writeFile("./fs1.txt", "异步文件写入的内容", err => {if (err) {console.log('写入失败:' + err)return}console.log('写入成功')
})
④ 使用场景:
适用于写入频次较低的场景
2、同步写入:writeFileSync
① 语法:
fs.writeFileSync(file,data[, options])
② 参数说明:
(1)file:指定目标文件的路径或标识符。
类型:字符串、Buffer、URL 或文件描述符(整数)
如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。
(2)data:待写入的数据。
类型:字符串、Buffer、TypedArray、DataView
(3)options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
utf8 - 作用:指定文本数据的编码格式,支持
ascii、base64、hex等
flag:
- 默认值:
w(覆盖写入,文件不存在则创建) - 其它值:
a:追加内容(文件不存在则创建)
wx:写入失败(若文件已存在)
(3)示例:
const fs = require('fs')
fs.writeFileSync("./fs2.txt", "同步文件写入的内容")
3、异步追加写入:
① appendFile:
(1)语法:
fs.appendFile(path,data[, options], callback)
(2)参数说明:
a、path:文件名(所在的路径)。
类型:字符串、Buffer、URL 或文件描述符(整数)
如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。
b、data:待写入的数据。
类型:字符串、Buffer
\r\n 表示换行
c、options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
utf8 - 作用:指定文本数据的编码格式,支持
ascii、base64、hex等
flag:
- 默认值:
a(追加模式,文件不存在则创建) - 其它值:
a+:追加且可读
wx:文件存在时报错
d、callback:回调函数。
写入完成后调用,会接收一个参数,写入成功,该参数为
null;写入失败,该参数为错误对象
(3)示例:
const fs = require('fs')
fs.appendFile("./fs3.txt", "\r\n文件追加的内容", err => {if (err) {console.log('追加写入失败:'+err)return}console.log('追加写入成功')
})
② writeFile:
const fs = require('fs')
fs.writeFile("./fs3.txt", "配置文件追加写入---love",{flag: 'a'
}, err => {if (err) {console.log('追加写入失败:'+err)return}console.log('追加写入成功')
})
4、同步追加写入:appendFileSync
① 语法:
fs.appendFileSync(file,data[, options])
② 参数说明:
a、path:文件名(所在的路径)。
类型:字符串、Buffer、URL 或文件描述符(整数)
如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。
b、data:待写入的数据。
类型:字符串、Buffer
\r\n 表示换行
c、options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
utf8 - 作用:指定文本数据的编码格式,支持
ascii、base64、hex等
flag:
- 默认值:
a(追加模式,文件不存在则创建) - 其它值:
a+:追加且可读
wx:文件存在时报错
③ 示例:
const fs = require('fs')
fs.appendFileSync("./fs3.txt", "\r\n文件同步内容")
5、流式写入:createWriteStream
① 语法:
fs.createWriteStream(path[, options])
② 参数说明:
(1)path:文件名(所在的路径)。
类型:字符串、Buffer、URL 或文件描述符(整数)
如果路径中没有该文件,则会创建一个文件;如果路径中有该文件,默认会重写文件中的内容。
(2)options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
utf8 - 作用:指定文本数据的编码格式,支持
ascii、base64、hex等
flags:
- 默认值:
w(覆盖写入,文件不存在则创建) - 其它值:
a:追加内容到文件末尾
r+:修改文件内容(非覆盖),需配合start参数指定写入位置
wx:文件存在时报错
autoClose:
- 默认值:
true(自动关闭文件描述符)。 - 作用:若设为
false,需手动调用close()关闭流
start:
- 作用:指定写入起始位置(字节偏移量),需在
r+'模式下生效
emitClose
- 默认值:
false(不触发close事件)。 - 作用:设为
true时,流销毁后会触发close事件
③ 返回值:
Object
④ 示例:
const fs = require('fs')
// 创建文件写入流对象,和文件建立连接
let ws = fs.createWriteStream("./fs4.txt")
// 写入内容,和文件不会断开连接
ws.write('春眠不觉晓\r\n')
ws.write('处处闻啼鸟\r\n')
ws.write('夜来风雨声\r\n')
ws.write('花落知多少\r\n')
// 断开连接 -- 可选,当脚本文件执行完毕后,资源会被回收,通道也会被断开。
ws.close()
⑤ 使用场景:
适用于大文件写入或者写入频次较高的场景
四、文件读取:
1、异步读取:readFile
① 语法:
fs.readFile(path[, options], callback)
② 参数说明:
(1)path:指定目标文件的路径或标识符。
类型:字符串、Buffer、URL 或文件描述符(整数)
(2)options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
null(返回原始Buffer数据) - 作用:指定文本内容的编码格式 ,可选值是
utf8、ascii、base64等
flag:
- 默认值:
r(以只读模式打开文件) - 其它值:
w:覆盖文件(文件不存在则创建)
a:追加内容(文件不存在则创建)
(3)callback:回调函数。
读取完成后调用,会接收两个参数。
参数1:读取成功,该参数为null;读取失败,该参数为错误对象
参数2:读取文件的内容
③ 示例:
const fs = require('fs')
fs.readFile('./fs5.txt', (err,data) => {if (err) {console.log('文件读取失败')return}// console.log(data)console.log(data.toString())
})
2、同步读取:readFileSync
① 语法:
fs.readFileSync(path[, options])
② 参数说明:
(1)path:指定目标文件的路径或标识符。
类型:字符串、Buffer、URL 或文件描述符(整数)
若路径错误(如文件不存在或权限不足),会抛出
ENOENT错误
(2)options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
null(返回原始Buffer数据) - 作用:指定文本内容的编码格式 ,可选值是
utf8、ascii、base64等
flag:
- 默认值:
r(以只读模式打开文件) - 其它值:
r+:读写模式
a:追加模式
③ 示例:
const fs = require('fs')
let data = fs.readFileSync('./fs5.txt')
console.log(data.toString())
3、流式读取:createReadStream
① 语法:
fs.createReadStream(path[, options])
② 参数说明:
(1)path:文件名(所在的路径)。
类型:字符串、Buffer、URL 或文件描述符(整数)
若路径错误(如文件不存在或权限不足),会抛出
ENOENT错误
(2)options:配置项(可选)。
类型:字符串(仅编码格式)或对象(包含多个配置项)
可选属性:
encoding:
- 默认值:
null,返回Buffer - 作用:指定数据编码格式,支持
utf8、ascii、base64、hex等
flags:
- 默认值:
r(只读模式) - 其它值:
a:追加内容到文件末尾
r+:读写
wx:文件存在时报错
autoClose:
- 默认值:
true(自动关闭文件描述符)。 - 作用:若设为
false,需手动调用close()关闭流
start:
- 作用:读取起始字节位置(含)
end:
- 作用:读取结束字节位置(含)。若未指定
start,默认从文件头开始读取
③ 返回值:
Object
④ 示例:
const fs = require('fs')
// let rs = fs.createReadStream('./fs5.txt')
let rs = fs.createReadStream('./resource/food.mp4')
rs.on('data', chunk => { // 分块读取,每个块的最大容量为 65536字节 = 64KB// console.log(chunk) console.log(chunk.length)
})rs.on('end', () => {console.log('读取完毕')
})
五、文件复制:
1、全文件操作:
const fs = require('fs')
let fileData = fs.readFileSync('./resource/food.mp4')
fs.writeFile('./resource/food2.mp4',fileData, err => {if (err) {console.log(`文件复制失败--${err}`)return}console.log(`文件复制成功`)
})
2、流式文件操作:
const fs = require('fs')
const process = require('process')
let rs = fs.createReadStream("./resource/food.mp4")
let ws = fs.createWriteStream("./resource/food3.mp4")
// 方式一:
rs.on('data', chunk => {ws.write(chunk)
})
rs.on('end', () => {console.log(process.memoryUsage()) // { rss: 31657984, heapTotal: 5791744, heapUsed: 3381216,external: 10385147,arrayBuffers: 9269529 }console.log(`文件复制完毕,代码内存占用量:${process.memoryUsage().rss}`) // rss 31830016 = 30MB
})
// 方式二:
rs.pipe(ws)
六、文件的重命名与移动:
1、文件的重命名:
① 异步重命名:rename
(1) 语法:
fs.rename(oldpath, newpath, callback)
(2) 参数说明:
a、oldpath:指定需重命名或移动的原始文件/目录路径。
类型:字符串、Buffer、URL 或文件描述符(整数)
若路径不存在或权限不足,回调函数会返回
ENOENT或EPERM错误
b、newpath:指定目标文件/目录的新路径或名称。
类型:字符串、Buffer、URL 或文件描述符(整数)
若
newPath已存在且为文件:直接覆盖原文件
若newPath为目录:抛出EISDIR错误
路径要求:目标路径的父目录必须存在,否则抛出ENOENT错误
c、callback:操作完成后的回调函数。
完成后调用,会接收一个参数,成功参数为
null;失败参数为错误对象
(3) 示例:
const fs = require('fs')
fs.rename('./fs5.txt', './红楼梦.txt', err => {if (err) {console.log('文件重命名失败')return}console.log('文件重命名成功')
})
② 同步重命名:
(1) 语法:
fs.renameSync(oldpath, newpath)
(2) 参数说明:
a、oldpath:指定需重命名或移动的原始文件/目录路径。
类型:字符串、Buffer、URL 或文件描述符(整数)
若路径不存在或权限不足,回调函数会返回
ENOENT或EPERM错误
b、newpath:指定目标文件/目录的新路径或名称。
类型:字符串、Buffer、URL 或文件描述符(整数)
若
newPath已存在且为文件:直接覆盖原文件
若newPath为目录:抛出EISDIR错误
路径要求:目标路径的父目录必须存在,否则抛出ENOENT错误
(3) 示例:
const fs = require('fs')
fs.renameSync('./resource/food2.mp4', './food.mp4')
2、文件的移动:
移动和重命名一样,只是改变了文件的路径
七、文件删除:
1、通用:
① 异步文件删除:unlink
(1) 语法:
fs.unlink(path, callback)
(2) 参数说明:
a、path:表示要删除的文件路径。
类型:字符串、Buffer、URL
如果路径指向目录而非文件,会抛出
EISDIR错误(需使用fs.rmdir删除目录)
路径需确保存在且权限足够,否则会触发错误(如ENOENT表示文件不存在,EPERM表示权限不足)
b、callback:操作完成后的回调函数。
完成后调用,会接收一个参数,成功参数为
null;失败参数为错误对象
(3) 示例:
const fs = require('fs')
fs.unlink('./fs3.txt', err => {if (err) {console.log('文件删除失败')return}console.log('文件删除成功')
})
② 同步文件删除:unlinkSync
(1) 语法:
fs.unlinkSync(path)
(2) 参数说明:
a、path:表示要删除的文件路径。
类型:字符串、Buffer、URL
如果路径指向目录而非文件,会抛出
EISDIR错误(需使用fs.rmdir删除目录)
路径需确保存在且权限足够,否则会触发错误(如ENOENT表示文件不存在,EPERM表示权限不足)
(3) 示例:
const fs = require('fs')
try {fs.unlinkSync('./food.mp4')console.log('删除成功');
} catch (err) {console.error('删除失败:', err.message);
}
2、node 14.14.0 版本以上:
① 异步文件删除:rm
(1) 语法:
fs.rm(path[, options], callback)
(2) 参数说明:
a、path:指定要删除的文件或目录的路径。
类型:字符串、Buffer、URL
b、options:操作完成后的回调函数。
类型:对象
可选属性:
recursive:
- 默认值:
false(不会递归删除目录及其所有子目录和文件) - 作用:是否递归删除目录及其所有子目录和文件,若路径是文件,此参数无效。
force:
- 默认值:
false
作用:设置为true时,若路径不存在,忽略错误(不触发ENOENT)。适用于需要静默处理路径不存在的情况
maxRetries:
类型:整数
- 默认值:0。
- 作用:在遇到
EBUSY、ENOTEMPTY等错误时,设置重试次数。
retryDelay:
类型:整数
- 默认值:100(毫秒)。
- 作用:重试操作前的等待时间。
c、callback:操作完成后的回调函数。
完成后调用,会接收一个参数,成功参数为
null;失败参数为错误对象
(3) 示例:
const fs = require('fs')
fs.rm('./fs2.txt', err => {if (err) {console.log('文件删除失败')return}console.log('文件删除成功')
})
② 同步文件删除:rmSync
(1) 语法:
fs.rmSync(path[, options])
(2) 参数说明:
a、path:指定要删除的文件或目录的路径。
类型:字符串、Buffer、URL
b、options:操作完成后的回调函数。
类型:对象
可选属性:
recursive:
- 默认值:
false(不会递归删除目录及其所有子目录和文件) - 作用:是否递归删除目录及其所有子目录和文件,若路径是文件,此参数无效。
force:
- 默认值:
false
作用:设置为true时,若路径不存在,忽略错误(不触发ENOENT)。适用于需要静默处理路径不存在的情况
maxRetries:
类型:整数
- 默认值:0。
- 作用:在遇到
EBUSY、ENOTEMPTY等错误时,设置重试次数。
retryDelay:
类型:整数
- 默认值:100(毫秒)。
- 作用:重试操作前的等待时间。
(3) 示例:
const fs = require('fs')
try {fs.rmSync('./fs1.txt')console.log('删除成功');
} catch (err) {console.error('删除失败:', err.message);
}
八、文件夹操作:
1、创建文件夹:
① 异步创建文件目录:mkdir
(1) 语法:
fs.mkdir(path[, options], callback)
(2) 参数说明:
a、path:目标目录的完整路径。
类型:字符串、Buffer、URL
如果路径指向目录而非文件,会抛出
EISDIR错误(需使用fs.rmdir删除目录)
路径需确保存在且权限足够,否则会触发错误(如ENOENT表示文件不存在,EPERM表示权限不足)
b、options:
类型:对象或整数(旧版本兼容)
可选属性:
recursive:
- 默认值:
false(不会递归创建父目录) - 作用:是否递归创建父目录
c、callback:操作完成后的回调函数。
参数:(err, path) => {}
err:操作失败时的错误对象(成功时为null)。path(仅递归模式下):返回第一个被创建的目录路径(若无新目录创建则为undefined)
(3) 示例:
a、创建目录 – 基本用法
const fs = require('fs')
fs.mkdir('./a', err => {if (err) {console.log('文件夹创建失败')throw err;}console.log('文件夹创建成功')
})
b、创建目录 – 递归用法
const fs = require('fs')
fs.mkdir('./b/c/d', {recursive: true
}, err => {if (err) {console.log('文件夹创建失败')throw err;}console.log('文件夹创建成功')
})
② 同步创建文件目录:mkdirSync
(1) 语法:
fs.mkdirSync(path[, options])
(2) 参数说明:
a、path:目标目录的完整路径。
类型:字符串、Buffer、URL
如果路径指向目录而非文件,会抛出
EISDIR错误(需使用fs.rmdir删除目录)
路径需确保存在且权限足够,否则会触发错误(如ENOENT表示文件不存在,EPERM表示权限不足)
b、options:
类型:对象或整数(旧版本兼容)
可选属性:
recursive:
- 默认值:
false(不会递归创建父目录) - 作用:是否递归创建父目录
(3) 示例:
a、创建目录 – 基本用法
const fs = require('fs')
try {fs.mkdirSync('./logs'); // 默认recursive: falseconsole.log('目录创建成功');
} catch (err) {console.error('错误:', err.message);
}
b、创建目录 – 递归用法
const createdPath = fs.mkdirSync('./资源/components', { recursive: true });
console.log('首个创建目录路径:', createdPath); // 输出:XXX\资源
2、读取文件夹:
① 异步读取文件目录:readdir
(1) 语法:
fs.readdir(path[, options], callback)
(2) 参数说明:
a、path:目标目录的完整路径。
类型:字符串、Buffer、URL
路径需确保存在且权限足够,否则会触发错误(如
ENOENT表示文件不存在,EPERM表示权限不足)
b、options:
类型:字符串(指定编码)或对象
可选属性:
encoding:
- 默认值:
utf8 - 作用:指定返回文件名的字符编码
- 其它值:
buffer
withFileTypes:
- 默认值:
false(数组中元素的类型为字符串) - 作用:指定返回数组的数据类型
- 其它值:
true(返回数组中的元素为fs.Dirent对象)
c、callback:操作完成后的回调函数。
参数:(err, files) => {}
err:操作失败时的错误对象(成功时为null)。files:包含目录下所有文件和子目录名称的数组(不包含.和..)
(3) 示例:
const fs = require('fs')
fs.readdir('./', (err, files) => {if (err) {console.error('读取失败:', err.message);return;}console.log('目录内容:', files); // 输出如:[ '1_buffer.js','2_fs.js','a', 'b','logs', 'resource', '红楼梦.txt', '资源']
});
② 同步读取文件目录:readdirSync
(1) 语法:
fs.readdirSync(path[, options])
(2) 参数说明:
a、path:目标目录的完整路径。
类型:字符串、Buffer、URL
路径需确保存在且权限足够,否则会触发错误(如
ENOENT表示文件不存在,EPERM表示权限不足)
b、options:
类型:字符串(指定编码)或对象
可选属性:
encoding:
- 默认值:
utf8 - 作用:指定返回文件名的字符编码
- 其它值:
buffer
withFileTypes:
- 默认值:
false(数组中元素的类型为字符串) - 作用:指定返回数组的数据类型
- 其它值:
true(返回数组中的元素为fs.Dirent对象)
(3) 示例:
const fs = require('fs')
const files = fs.readdirSync('./resource');
console.log('目录内容:', files); // [ 'food3.mp4' ]
3、删除文件夹:
① 异步删除文件目录:rmdir
(1) 语法:
fs.rmdir(path[, options], callback)
(2) 参数说明:
a、path:目标目录的完整路径。
类型:字符串、Buffer、URL
如果路径指向目录而非文件,会抛出
EISDIR错误(需使用fs.rmdir删除目录)
路径需确保存在且权限足够,否则会触发错误(如ENOENT表示文件不存在,EPERM表示权限不足)
b、options:
类型:对象
可选属性:
recursive:
- 默认值:
false(不会递归删除子目录) - 作用:是否递归删除子目录
maxRetries:
类型:整数
- 默认值:0。
- 作用:在遇到
EBUSY、ENOTEMPTY等错误时,设置重试次数。仅当recursive: true时生效
retryDelay:
类型:整数
- 默认值:100(毫秒)。
- 作用:重试操作前的等待时间。仅当
recursive: true时生效
c、callback:操作完成后的回调函数。
参数:(err) => {}
err:操作失败时的错误对象(成功时为null)。
(3) 示例:
a、删除目录 – 基本用法
const fs = require('fs')
fs.rmdir('./资源/components', (err) => {if (err) console.error('删除失败:', err.message);else console.log('目录已删除');
});
b、删除目录 – 递归不推荐用法
递归模式在v14.14.0+已弃用,推荐使用fs.rm
const fs = require('fs')
fs.rmdir('logs', { recursive: true }, (err) => {if (err) console.error('删除失败:', err.message);else console.log('目录已删除');
})
c、删除目录 – 递归推荐用法
const fs = require('fs')
fs.rm('1', { recursive: true, force: true }, (err) => {if (err) console.error('删除失败:', err.message);else console.log('目录已删除');
})
② 同步删除文件目录:rmdirSync
(1) 语法:
fs.rmdirSync(path[, options])
(2) 参数说明:
a、path:目标目录的完整路径。
类型:字符串、Buffer、URL
如果路径指向目录而非文件,会抛出
EISDIR错误(需使用fs.rmdir删除目录)
路径需确保存在且权限足够,否则会触发错误(如ENOENT表示文件不存在,EPERM表示权限不足)
b、options:
类型:对象
可选属性:
recursive:
- 默认值:
false(不会递归删除子目录) - 作用:是否递归删除子目录
maxRetries:
类型:整数
- 默认值:0。
- 作用:在遇到
EBUSY、ENOTEMPTY等错误时,设置重试次数。仅当recursive: true时生效
retryDelay:
类型:整数
- 默认值:100(毫秒)。
- 作用:重试操作前的等待时间。仅当
recursive: true时生效
(3) 示例:
a、删除目录 – 基本用法
const fs = require('fs')
try {fs.rmdirSync('./资源');} catch (err) {if (err.code === 'ENOTEMPTY') {console.log('目录非空,请启用递归选项');}
}
b、删除目录 – 递归不推荐用法
递归模式在v14.14.0+已弃用,推荐使用fs.rmSync

const fs = require('fs')
try {fs.rmdirSync('b', { recursive: true });
} catch (err) {if (err.code === 'ENOTEMPTY') {console.log('目录非空,请启用递归选项');}
}
c、删除目录 – 递归推荐用法
const fs = require('fs')
try {fs.rmSync('./8/9', { recursive: true });
} catch (err) {if (err.code === 'ENOTEMPTY') {console.log('目录非空,请启用递归选项');}
}
九、查看资源状态:
1、异步查看:stat
① 语法:
fs.stat(path[, options], callback)
② 参数说明:
(1)path:目标文件或目录的路径。
类型:字符串、Buffer、URL
(2)options:配置项(可选)。
类型:对象
可选属性:
bigint:
- 默认值:
false - 作用:若设为
true,返回的fs.Stats对象中数值属性将使用BigInt类型,避免大数精度丢失(Node.js ≥10.5.0支持)
(3)callback:回调函数。
- 参数:
(err, stats) => {}
err:操作失败时的错误对象(如路径不存在ENOENT或权限不足EACCES)。
stats:fs.Stats对象,包含文件/目录的详细信息
③ 示例:
fs.stat("./resource/food3.mp4", (err, stats) => {if (err) throw errconsole.log(stats)
})

2、同步查看:statSync
① 语法:
fs.statSync(path[, options])
② 参数说明:
(1)path:目标文件或目录的路径。
类型:字符串、Buffer、URL
(2)options:配置项(可选)。
类型:对象
可选属性:
bigint:
- 默认值:
false - 作用:若设为
true,返回的fs.Stats对象中数值属性将使用BigInt类型,避免大数精度丢失(Node.js ≥10.5.0支持)
③ 示例:
try {const stats = fs.statSync("./resource/food3.mp4")console.log(stats);
} catch (err) {console.error('错误:', err.message);
}
3、判断是否为文件:stats.isFile()
try {const stats = fs.statSync("./resource/food3.mp4")console.log(stats.isFile()); // true
} catch (err) {console.error('错误:', err.message);
}
4、判断是否为目录:stats.isDirectory()
try {const stats = fs.statSync("./resource/food3.mp4")console.log(stats.isDirectory()); // false
} catch (err) {console.error('错误:', err.message);
}
十、相对路径的参照物引发的问题:
1、相对路径的参照物:命令行的工作目录
当使用相对路径操作
目标 文件/文件夹时,会从命令行所在的目录进行查找目标 文件/文件夹,然后进行操作。所以会导致文件的操作随着命令行工作的目录的变换而变换。
2、解决办法:
使用绝对路径
① 绝对路径的表示方式一:D:\XX\XX\XXX.txt
② 绝对路径的表示方式二:/
③ 绝对路径的表示方式三: __dirname
该变量存储的值:当前__dirname 所在文件的 所在目录的绝对路径
console.log(__dirname)
fs.writeFileSync(__dirname+ "/test.txt", '在不同位置的命令行运行这个文件')
