nodejs file system官方文档:https://nodejs.org/dist/latest-v14.x/docs/api/fs.html
源码:https://github.com/cmdfas/nodejs-file-system
项目结构:├── files│ ├── file1│ └── file2├── dir.js├── index-callback.js├── index-promise.js└── stream.js
常规文件操作回调函数式操作创建index-callback.js,代码如下
const fs = require('fs')const path = require('path')// 读取文件fs.readfile(path.join(__dirname, 'files', 'file1'), (err, buf) => { if (err) throw err console.log(buf.tostring()) })// 写入文件fs.writefile(path.join(__dirname, 'files', 'file3'), '欢迎光临', (err) => { if (err) throw err console.log('写入完成') // 在文件末尾追加 fs.appendfile(path.join(__dirname, 'files', 'file3'), '\n\n男宾三位', (err) => { if (err) throw err console.log('追加完成') // 修改文件名称 fs.rename(path.join(__dirname, 'files', 'file3'), path.join(__dirname, 'files', 'file3-rename'), (err) => { if (err) throw err console.log('改名完成') }) })})
总结:
readfile用来读取文件的内容,在读取成功后在回调函数返回的是buffer格式,所以需要调用tostring()方法writefile写入内容进文件,如果文件不存在会自动创建文件appendfile在文件末尾追加内容,如果文件不存在会自动创建文件rename可以用来修改文件名称path.join用来拼接文件路径,可以避免不同操作系统路径格式不同的问题__dirname是node.js全局变量,默认是当前项目目录promise async await式操作创建index-promise.js,代码如下
const fspromises = require('fs').promisesconst path = require('path')const filefunc = async () => { try { const data = await fspromises.readfile(path.join(__dirname, 'files', 'file1')) console.log(data.tostring()) await fspromises.unlink(path.join(__dirname, 'files', 'file1')) await fspromises.writefile(path.join(__dirname, 'files', 'file5'), data) await fspromises.appendfile(path.join(__dirname, 'files', 'file5'), '\n\n欢迎光临') await fspromises.rename(path.join(__dirname, 'files', 'file5'), path.join(__dirname, 'files', 'file5-rename')) const newdata = await fspromises.readfile(path.join(__dirname, 'files', 'file5-rename')) console.log(newdata.tostring()) } catch (error) { console.log(error) }}filefunc()
总结:
相比回调式操作,使用async await操作会更加优雅,不会出现回调地狱unlink用来删除文件文件流操作创建stream.js,代码如下
方式一const fs = require('fs')// 读取文件流const rs = fs.createreadstream('./files/file2', { encoding: 'utf8' })// 写入文件流const ws = fs.createwritestream('./files/new-file2')// 监听读取并写入rs.on('data', (chunk) => { ws.write(chunk)})
在读取大文件时或者处理网络文件时,文件流操作很有用,在操作大文件时,我们可以设置每次读取的数据量大小,默认是64kb
方式二const fs = require('fs')// 读取文件流const rs = fs.createreadstream('./files/file2', { encoding: 'utf8' })// 写入文件流const ws = fs.createwritestream('./files/new-file2')rs.pipe(ws)
pipe方法自动将读取文件流导入到写入流,相当于一个便捷操作。
操作文件夹创建dir.js,代码如下
const fs = require('fs')// 判断文件夹是否存在if (!fs.existssync('./new')) { // 创建文件夹 fs.mkdir('./new', (err) => { if (err) throw err console.log('文件夹创建成功') })}if (fs.existssync('./new')) { // 删除文件夹 fs.rmdir('./new', (err) => { if (err) throw err console.log('文件夹删除成功') })}
总结:
existssync是同步方法,用来判断文件夹是否存在mkdir创建文件夹rmdir删除文件夹这3个操作文件夹的方法非常常用,就像每天吃饭一样。
更多编程相关知识,请访问:编程入门!!
以上就是快速了解nodejs项目中如何增删改查文件的详细内容。
