前面我們已經學習了如何使用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...