前言
flie system 可以在服务端读取文件和数据 方法是同步+异步共存
同步方法易使用(刚开始可以用同步)
异步方法不会阻塞主线程(程序运行起来之后可以用异步 回调函数)
1 | let fs = require('fs'); |
分析:先将note.md中的内容全部读取到内存中,再将内存写入note1中。如果文件非常大,这样就会很消耗内存,所以不适合大文件来使用,可能会导致内存的浪费 性能不高。
所以可以读取一些 写入一些
fs + Buffer
手动按照字节读取 fs.open fs.read fs.write fs.close
fs.open
1 | // r 读取 |
- 现在希望每次读3个再写入
fs.open + fs.read + fs.close + Buffer
1 | let fs = require('fs'); |
- 写入 在读的过程中写入
fs.open + fs.read + fs.write + Buffer
1 | let fs = require('fs'); |
- writeFileSync 、appendFileSync
1 | let fs = require('fs'); |
两个耦合性比较高的代码 怎么拆分, 发布订阅 => 流
- 读取一点写一点 不会导致淹没可用内存
1 | const fs = require('fs'); |
fs操作文件
文件的操作
- fs.readFile 、fs.existSync 、fs.access
- fs.writeFile 、fs.copyFile()
- fs.rename 、fs.unlink
文件夹的操作
- 创建目录 mkdir
- 删除目录 rmdir
- 读取目录 readdir
fs.stat 提供了关于文件的信息(文件状态)
- 删除文件 重命名
1 | const fs = require('fs'); |
创建目录
创建目录 必须是存在的文件夹才能向下创建
- mkdirSync 、mkdir创建文件夹
1 | // 现有a/文件夹 |
- 现在希望实现 mkdir(‘a/b/c/d’)
1 | const fs = require('fs'); |
删除目录
删除目录 包含子目录不能删除
1 | // 删除目录 |
- 删除a文件夹下的文件夹或文件 这里只有一层
1 | const fs = require('fs'); |
递归删除目录
其实就是树的遍历
- 先序深度遍历
深度 先序 串联
1 | const fs = require('fs'); |
分析:如图,现在删除的顺序是c、d删除,再删b再删e,其实删cdb和e没有必然关系,这样就会导致性能上的劣势。所以可以cdb自己删自己的,e包括它下面的自己删自己的,同一层的全部删除完毕之后 告诉上一层,如这里的a,然后再删除a 上面可以理解为串联的删。
并发的删除
1 | const fs = require('fs'); |
上面的代码还是有点复杂 只要是异步的其实都可以用Promise
1 | const fs = require('fs'); |
async + await 后序都会这样写 重要
1 | const {unlink, readdir, stat, rmdir} = require('fs').promises; |
- 广度遍历
1 | const fs = require('fs'); |