node的fs模块异步读写内容

2019-10-03  本文已影响0人  TerdShow

file system 可以在服务端读取文件和数据 方法是同步 + 异步共存
同步方法易使用 (刚开始运行 )
异步方法不会阻塞主线程 (运行起来后用异步)

let fs = require('fs');
let path = require('path');
// 读取文件 文件不存在会报错
// 写入文件 文件不存在会创建文件
fs.readFile('./note.md',function(err,data){
   if(err){
     console.log(err)
   }
   fs.writeFile('./note.md1',data,function(){

   })
});

64k以下的读写可以用上面这种方式
不适合大文件来使用,否则可能会导致内存的浪费
可以读取一点 写入一点
手动按照自己来读取 fs.open fs.read fs.write fs.close
r 读取
w 写入
r+ 在读的基础上可以写 但是文件不存在会报错
w+ 在写的基础上读取 如果文件不存在 会创建

const fs = require("fs");
// 读取一点 写一点,不会导致淹没可用内存
const SIZE = 5;
let buffer = Buffer.alloc(SIZE);
fs.open("./note.md", "r", function(err, rfd) {
  // number
  fs.open("./copy.md", "w", function(err, wfd) {
    let readOffset = 0;
    let writeOffset = 0;
    // co
    function next() {
      fs.read(rfd, buffer, 0, SIZE, readOffset, function(err, bytesRead) {
        if(bytesRead === 0){
            fs.close(wfd,()=>{})
            return fs.close(rfd,()=>{});
        }
        fs.write(wfd, buffer, 0, bytesRead, writeOffset, function() {
            readOffset += bytesRead;
            writeOffset += bytesRead;
            next();
        });
      });
    }
    next();
  });
});

// 两个耦合性比较高的代码怎么拆分, 发布订阅/stream

//写入时 没有会创建 如果有会清空
fs.appendFileSync('1.js','123')
// 如果文件已经存在 会将文件中的内容清空
fs.writeFileSync('1.js','123',{flag:'a'}); 
上一篇下一篇

猜你喜欢

热点阅读