nodejs对文件的操作首先要先导入fs模块
const fs = require('fs')
文件写入
使用场景:1. 下载文件 2.安装文件 3.保存程序日志 4.编辑器保存文件 5.视频录制
| 方法 | 同步/异步 |
|---|---|
| writeFile | 异步 |
| writeFileSync | 同步 |
| appendFile | 异步 |
| appendFileSync | 同步 |
(1)fs.writeFile (file, data[, options], callback) |
-
options|encoding| 默认值:'utf8'mode默认值:0o666flag请参阅对文件系统flags的支持。 默认值:'w'。signal允许中止正在进行的写入文件
当
file是文件名时,将数据异步地写入文件,如果文件已存在则替换该文件。fs.writeFile('./美少女学习日记', '美少女学习第一天', err => { if (err) { throw err console.log('保存失败') return } else { console.log('保存成功') } })(2)fs.writeFileSync
(file, data[, options])options没有signal,因为同步不会被中止fs.writeFileSync('./美少女测试', '测试')(3)fs.appendFile
(path, data[, options], callback)options也是没有signal,异步地将数据追加到文件,如果该文件尚不存在,则创建该文件。fs.appendFile('./美少女学习日记', '\r\n异步追加', err => { if (err) { console.log('保存失败') return } else { console.log('保存成功111') } })(4)fs.appendFileSync
(path, data[, options])fs.appendFileSync('./美少女测试', '\r\n同步追加')(5) fs.createWriteStream()
//大文件写入和频繁写入用createWriteStream,写入较少写就用上面的 const ws = fs.createWriteStream('./美少女测试流式写入') ws.write('1') ws.write('2') //关掉就不写入,加不加都可以 ws.close()文件读取
使用场景:1.开机,2程序运行 3,编辑器打开文件 4.查看文件视频图片 4.git查看日志 5.上传文件 6.查看聊天记录
方法 同步/异步 readFile 异步 readFileSync 同步 createReadStream 异步 (1)fs.readFile (path[, options], callback)-
options|encoding| 默认值:nullflag请参阅对文件系统flags的支持。 默认值:'r'。signal允许中止正在进行的读取文件
fs.readFile('./美少女测试', (err, data) => { if (err) { console.log('读取失败') } console.log(data.toString()) })(2)fs.readFileSync
(path[, options])返回<string> | <buffer> let a = fs.readFileSync('./美少女测试流式写入').toString()(3) fs.createReadStream
//流式读取 const test = fs.createReadStream('./pic/图片1.png') //绑定data事件 test.on('data', chunk => { //读完一块就掉一次回调,chunk是内容的buffer数据 console.log(chunk) //一次读多少数据 console.log(chunk.length) }) test.on('end',()=>{ console.log('读取完毕') })文件删除 (1)fs.unlink
(path, callback)fs.unlink('./test.txt', err =>{ if(err) throw err console.log('删除成功') }) fs.unlinkSync('./test2.txt')(2)fs.unlinkSync
(path)fs.unlinkSync('./test.txt')创建文件 (1)fs.mkdir
(path[, options], callback)-
options|
//迭代创建的时候才有path,不然path为undefined fs.mkdir('./1/2/3/4', { recursive: true }, (err,path) => { if (err) throw err console.log(path) //C:\Users\gqy\Desktop\nodeStu\1\2\3\4 }) fs.mkdir('./gqya', (err,path) => { if (err) throw err console.log(path) //undefiend })(2)fs.mkdirSync
(path[, options])-
返回:
undefined或创建的第一个目录路径(如果recursive为true)。
fs.mkdirSync('./x/y/z', {recursive: true})读取文件夹
// 异步读取 fs.readdir('./论语', (err, data) => { if(err) throw err console.log(data) }) // 同步读取 let data = fs.readdirSync('./论语') console.log(data)删除文件夹
//异步 fs.rmdir('./gqya', err => { if(err) throw err }) //同步 fs.rmdirSync('./gqy') //递归删除 fs.rm('./x', { recursive: true }, err => { if(err) throw err })查看资源
//异步 fs.stat('./pic', (err, data) => { if (err) throw err console.log(data) }) //data Stats { dev: 4073911422, mode: 16822, nlink: 1, uid: 0, gid: 0, rdev: 0, blksize: 4096, ino: 10133099161618428, size: 0, blocks: 0, atimeMs: 1687185514422.5076, mtimeMs: 1685033526492.8372, ctimeMs: 1685033526492.8372, birthtimeMs: 1685030226050.346, atime: 2023-06-19T14:38:34.423Z, mtime: 2023-05-25T16:52:06.493Z, ctime: 2023-05-25T16:52:06.493Z, birthtime: 2023-05-25T15:57:06.050Z } //同步 let data = fs.statSync('./2.操作.js') console.log(data)__dirname 保存当前文件夹的绝对路径,可以使用_dirname与文件名拼接成绝对路径推荐用这个
let data = fs.readFile(__dirname + '/2.操作.js', (err,data) => { if (err) throw err console.log(data) })