09 node 之 fs流讀寫

2022-04-24 21:45:35 字數 3329 閱讀 2282

前面我們已經學習了如何使用fs模組中的readfile方法、readfilesync方法讀取檔案中內容,及如何使用fs模組中的writefile方法、writefilesync方法向乙個檔案寫入內容。

用readfile方法或readfilesync方法讀取檔案內容時,node.js首將檔案內容完整地讀入快取區,再從該快取區中讀取檔案內容。在使用writefile方法或writefilesync方法寫入檔案內容時,node.js首先將該檔案內容完整地讀人快取區,然後一欠性將快取區中內容寫入到檔案中。

無論是read和write都是把檔案視為乙個整體,也是說,nodejs需要在記憶體中開闢與檔案相等大小的空間,如果檔案小,這的確沒有問題,但是如果是乙個非常大的(10g)檔案會怎樣?記憶體根本裝不下。

應用程式中,是一組有序的、有起點和終點的位元組資料的傳輸方式。在應用程式中各種物件之間交換與傳輸資料的時候,總是先將該物件中所包含的資料轉換為各種形式的流資料(即位元組資料),再通過流的傳輸,到達目的物件後再將流資料轉換為該物件中可以使用的資料。

流分為輸入流與輸出流

fs = require('fs');

var datacontent = ''; //儲存每次讀取的資料

// 設定編碼為 utf8。

//建立輸入流

var readerstream = fs.createreadstream("./a.txt",new buffer(20));

readerstream.setencoding('utf8');

//註冊讀取資料的事件

readerstream.on("data",function(content));

readerstream.on("err",function(err))

//讀取資料完畢的事件

readerstream.on("end",function())

var fs = require("fs");

var data = '源**教育';

// 建立乙個可以寫入的流,寫入到檔案 my.txt 中

var writerstream = fs.createwritestream('my.txt');

// 使用 utf8 編碼寫入資料

writerstream.write(data,'utf8');

// 標記檔案末尾

writerstream.end();

// 處理流事件 --> data, end, and error

writerstream.on('finish', function() {

console.log("寫入完成。");

writerstream.on('error', function(err){

console.log(err.stack);

console.log("程式執行完畢");

常用方法備註:

/*

* 流,在應用程式中表示一組有序的、有起點有終點的位元組資料的傳輸手段;

* node.js中實現了stream.readable/stream.writeable介面的物件進行流資料讀寫;以上介面都繼承自eventemitter類,因此在讀/寫流不同狀態時,觸發不同事件;

* 關於流讀取:node.js不斷將檔案一小塊內容讀入緩衝區,再從緩衝區中讀取內容;

* 關於流寫入:node.js不斷將流資料寫入內在緩衝區,待緩衝區滿後再將緩衝區寫入到檔案中;重複上面操作直到要寫入內容寫寫完;

* readfile、read、writefile、write都是將整個檔案放入記憶體而再操作,而則是檔案一部分資料一部分資料操作;

* * -----------------------流讀取-------------------------------------

* 讀取資料物件:

* fs.readstream 讀取檔案

* http.incomingmessage 客戶端請求或伺服器端響應

* net.socket socket埠物件

* child.stdout 子程序標準輸出

* child.stdin 子程序標準入

* process.stdin 用於建立程序標準輸入流

* gzip、deflate、deflateraw 資料壓縮

* * 觸發事件:

* readable 資料可讀時

* data 資料讀取後

* end 資料讀取完成時

* error 資料讀取錯誤時

* close 關閉流物件時

* * 讀取資料的物件操作方法:

* read 讀取資料方法

* setencoding 設定讀取資料的編

* pause 通知物件眾目停止觸發data事件

* resume 通知物件恢復觸發data事件

* pipe 設定資料通道,將讀入流資料接入寫入流;

* unpipe 取消通道

* unshift 當流資料繫結乙個解析器時,此方法取消解析器

* * ------------------------流寫入-------------------------------------

* 寫資料物件:

* fs.writestream 寫入檔案物件

* http.clientrequest 寫入http客戶端請求資料

* http.serverresponse 寫入http伺服器端響應資料

* net.socket 讀寫tcp流或unix流,需要connection事件傳遞給使用者

* child.stdout 子程序標準輸出

* child.stdin 子程序標準入

* gzip、deflate、deflateraw 資料壓縮

* * 寫入資料觸發事件:

* drain 當write方法返回false時,表示快取區中已經輸出到目標物件中,可以繼續寫入資料到快取區

* finish 當end方法呼叫,全部資料寫入完成

* pipe 當用於讀取資料的物件的pipe方法被呼叫時

* unpipe 當unpipe方法被呼叫

* error 當發生錯誤

* * 寫入資料方法:

* write 用於寫入資料

* end 結束寫入,之後再寫入會報錯;

Node之檔案系統fs

var fs require fs 非同步讀取 fs.readfile input.txt function err,data console.log 非同步讀取 data.tostring 同步讀取 var data fs.readfilesync input.txt console.log 同步...

Node系統模組 fs

node裡有乙個名詞,叫做 模組 英文叫做module。主要分為系統模組和自定義模組,自定義模組就涉及到npm了,以後再說這個工具。今天主要介紹一下系統模組裡面,用來操作檔案的module fs。node有乙個函式叫做require,它就是幫助你來引入模組的,具體使用以fs來舉例子 const fs...

node內建模組 FS

1 操作資料夾 mddir readdir,rename,rmdir const fs require fs 建立資料夾,不能建立重複的資料夾!fs.mkdir test err 更改 fs.rename test test01 err else 刪除 只能刪除空資料夾 fs.rmdir node0...