写入
- 文件操作
- 流式写入:
fs.createWriteStream(path[, options])
- 可以减少打开关闭文件的次数
- 适用于:大文件写入、频繁写入
- 参数说明:
- path:文件路径
- 流式写入:
- 文件夹操作:
- 调用
mkdir
方法:fs.mkdir('./a/b/c', err => {})
- 递归创建文件夹:加参数recursive
fs.mkdir('./a/b/c', {recursive: true}, err => {})
- 递归创建文件夹:加参数recursive
- 调用
读取
- 流式读取:
fs.createReadStream(path[, options])
- 读取文件返回的是Buffer对象,需要通过toString方法转成字符串
- 每次读取的最大内容为64KB,更节省内存使用空间
const rs = fs.createReadStream(path);rs.on('data', chunk => {console.log(chunk.length)// console.log(chunk.toString())})rs.on('end', () => {console.log('读取完成')})
复制
- 通过流式操作读取文件:
const rs = fs.createReadStream(path);
- 通过流式操作写入文件:
const ws = fs.createWriteStream(path2);
- 绑定data事件:
rs.on('data', chunk => {ws.write(chunk);})
- 更简便的使用方法:
rs.pipe(ws)
,边读取边写入
重命名和移动
重命名和移动本质都是通过rename
更改文件路径
- 重命名:
fs.rename(文件路径1,同路径的文件2, err =>{})
- 移动:
fs.rename(文件路径1,不同路径的文件2, err =>{})
删除
- 文件操作:
- 调用
unlink
方法:fs.unlink(文件路径,err => {})
- 调用
rm
方法(node 14.4新增):fs.rm(文件路径,err => {})
- 调用
- 文件夹操作:
- 调用
rmdir
方法(不推荐):fs.rmdir('./a/b/c', err => {})
- 递归删除文件夹:加参数recursive
fs.mkdir('./a/b/c', {recursive: true}, err => {})
- 递归删除文件夹:加参数recursive
- 调用
rm
方法(推荐,同删除文件方法):fs.rm('./a/b/c', err => {})
- 递归删除文件夹:加参数recursive
fs.mkdir('./a/b/c', {recursive: true}, err => {})
- 递归删除文件夹:加参数recursive
- 调用
路径操作
- 相对路径:参考的是命令行的工作目录,不是运行脚本所在的目录
- 绝对路径:使用
__dirname
获取文件所在目录的绝对路径fs.createReadStream(__dirname + '1.txt', '文件内容。。。')
- 规范的绝对路径:使用
path.resolve
创建规范的绝对路径,解决__dirname
反斜杠的问题
查看资源信息
- 获取文件名:通过
readdir
获取fs.readdir(path, options, callback )
,回调返回目录中所有文件名的数组fs.readdir(__dirname + '1.txt', (err, files) => { if (err) console.log(err); else { files.forEach(file => { console.log(file); }) } })
- 其他信息:通过
stat
获取fs.stat(__dirname + '1.txt', (err, data) => {})
错误处理
fs.readFile(filePath, (err, data) => {switch(err.code){case 'ENOENT': // 404 处理case 'EPERM': // 403 处理default: // 500 处理}})
补充:
- 换行:
\r\n
- path模块获取路径功能:
- reslove:拼接规范的绝对路径
- sep:获取操作系统的路径分隔符
- parse:解析路径并返回文件信息对象
- basename:获取文件名
- dirname:获取路径目录
- extname:获取文件扩展名