node的fs模塊異步讀寫(xiě)內(nèi)容

file system 可以在服務(wù)端讀取文件和數(shù)據(jù) 方法是同步 + 異步共存
同步方法易使用 (剛開(kāi)始運(yùn)行 )
異步方法不會(huì)阻塞主線(xiàn)程 (運(yùn)行起來(lái)后用異步)

let fs = require('fs');
let path = require('path');
// 讀取文件 文件不存在會(huì)報(bào)錯(cuò)
// 寫(xiě)入文件 文件不存在會(huì)創(chuàng)建文件
fs.readFile('./note.md',function(err,data){
   if(err){
     console.log(err)
   }
   fs.writeFile('./note.md1',data,function(){

   })
});

64k以下的讀寫(xiě)可以用上面這種方式
不適合大文件來(lái)使用,否則可能會(huì)導(dǎo)致內(nèi)存的浪費(fèi)
可以讀取一點(diǎn) 寫(xiě)入一點(diǎn)
手動(dòng)按照自己來(lái)讀取 fs.open fs.read fs.write fs.close
r 讀取
w 寫(xiě)入
r+ 在讀的基礎(chǔ)上可以寫(xiě) 但是文件不存在會(huì)報(bào)錯(cuò)
w+ 在寫(xiě)的基礎(chǔ)上讀取 如果文件不存在 會(huì)創(chuàng)建

const fs = require("fs");
// 讀取一點(diǎn) 寫(xiě)一點(diǎn),不會(huì)導(dǎo)致淹沒(méi)可用內(nèi)存
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();
  });
});

// 兩個(gè)耦合性比較高的代碼怎么拆分, 發(fā)布訂閱/stream

//寫(xiě)入時(shí) 沒(méi)有會(huì)創(chuàng)建 如果有會(huì)清空
fs.appendFileSync('1.js','123')
// 如果文件已經(jīng)存在 會(huì)將文件中的內(nèi)容清空
fs.writeFileSync('1.js','123',{flag:'a'}); 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容