代码仓库更新在:github
fs模块
attention:js的相对路径都是相对当前运行环境的工作目录,而不是相对该js文件的目录
引入
const fs = require('fs');
写入
异步写入:定义:写入操作执行时同时进行后面语句的执行,效率高
同步写入:定义:写入操作执行时等待写入操作执行完再执行后面语句,效率低
异步写入example:
fs.writeFile('./hello.txt', 'Hello from Node.js!',err => { // err write wrong; if(err){ console.log('error with writing file'); return; } console.log('file written successfully'); });
|
同步写入:将writeFile改为writeFileSync
追加
- 方式一:appendFile
- 方式二:在writeFile的形式参数中加上{fag:’a’}
for example:
const fs = require('fs'); fs.writeFile('./hello.txt', 'Hello from Node.js!',{flag:'a'},err => { // err write wrong; if(err){ console.log('error with writing file'); return; } console.log('file written successfully'); }); fs.appendFile('./hello.txt', '\r\nhello', err => { if(err){ console.log('error with writing file'); return; } console.log('file written successfully'); })
|
流式写入
创建对象
const ws = fs.createWritestream()
写入
ws.write()
结束
ws.end()或ws.close()
可以不加结束语句
特点
流失写入方式适合大文件或频繁操作文件,通过减少打开文件的次数来提高速度
读取
readfile()
- 路径
- 参数(可选)
- 回调函数(error 和 data)
回调的data是buffer,需要通过tostring方法将其转换为string格式便于阅读
readflieSync()是同步读取方法
流式读取
createReadStream,作用:提高读取效率
const fs = require('fs'); const rs = fs.createReadStream('hello.txt'); rs.on('data',chunk => { console.log('Data: ',chunk.toString()); })
|
每次读取65536bit,64kb
end可选事件
rs.on('end',() => { console.log('Read stream finished'); })
|
个人理解流式写入和读取都是在fs模块的基础上新建对象,然后读取需要绑定事件,写入直接调用方法;
然而直接写入写出可以直接用fs模块新建对象,然后调用方法进行写入写出
但是直接写入写出是将文件全部内容先读出再全部写入,相比之下,流式读取写入则是一边读取一边写入,节约了内存占用
重命名和移动
rename方法,参数包括原路径,末路径,回调函数
所谓的重命名和移动就是更改源文件的路径,本质相同
同步的方法就是加上Sync
for example
// rename fs.rename('hello.txt', 'rename.txt', err=>{ if(err){ console.log('rename failed'); } else{ console.log('rename successful'); } }) // move fs.rename('rename.txt','rename/rename.txt',error =>{ if(error){ console.log('move failed'); } else{ console.log('move successful'); } })
|
删除
unlink和rm两种方法,参数为文件路径和回调函数
同步就是加上Sync
for example
fs.unlink('hellw2.txt', err => { if(err){ console.log('delete failed'); } else{ console.log('delete sussessful'); } }) fs.rm('hellw2.txt', err => { if(err){ console.log('delete failed'); } else{ console.log('delete sussessful'); } })
|
创建文件(夹)
mkdir方法,传参:目标directory路径,回调函数
fs.mkdir('test', err => { if(err){ console.log('create failed'); } else{ console.log('create successful'); } } )
|
查看文件夹file
readdir方法,传参:目标directory路径,回调函数
fs.readdir('test', (err, files) => { if(err){ console.log('read failed'); } else{ console.log('read successful'); console.log(files); } })
|
删除文件夹
rm方法,传参:目标文件路径、回调函数
注:rmdir方法将要被移除
查看文件状态
stat方法,传参:目标文件路径、回调函数
for example
fs.stat('read.js', (err, stats) => { if(err){ console.log('status failed'); } else{ console.log('status successful'); console.log(stats); } })
|
stat输出如下:
Stats { dev: 1084496056, mode: 33206, nlink: 1, uid: 0, gid: 0, rdev: 0, blksize: 4096, ino: 562949953449871, size: 212, blocks: 0, atimeMs: 1726888786803.9666, mtimeMs: 1726888783851.079, ctimeMs: 1726888783851.079, birthtimeMs: 1726843900323.625, atime: 2024-09-21T03:19:46.804Z, mtime: 2024-09-21T03:19:43.851Z, ctime: 2024-09-21T03:19:43.851Z, birthtime: 2024-09-20T14:51:40.324Z }
|
birthtime:文件创建时间
mtime:最后一次修改时间
ctime:最后一次更新状态时间
atime:最后一次访问时间
按照时间先后排序:b早于m早于c早于a