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", '在不同位置的命令行运行这个文件')