檔案拷貝的原理是通過fs.readfile從乙個檔案讀取內容,然後通過fs.writefile將其寫入另乙個檔案。
readfile會預設將檔案內容全部讀取到記憶體中,然後再寫入另乙個檔案。
let fs = require('fs'); //fs即file system
let path = require('path');
/*1. 讀取檔案使用絕對路徑;
2. 讀取的內容全部讀取到記憶體中;
*///
非同步讀取檔案
fs.readfile(path.resolve(__dirname, './1.txt'), (err,data) =>);
})
但是這種拷貝檔案的方式,適用與檔案較小時(小於64k)。當大於64k時,會出現效能問題。通常會希望檔案邊讀邊寫。
這就需要檔案流。
檔案流基於事件。
//手動實現乙個events模組 模擬let eventemitter = require('events');
class eventemitter
this._events ={};
} //訂閱
on(eventname, callback)
else
} //發布
emit(eventname) );
} //removelistener
off(eventname, callback) }//
應用const e = new
eventemitter();
let eatfood = () =>
let eatfruit = () =>
e.on('eat', eatfood);
e.on('eat', eatfruit);
e.emit('eat');
/*eat food
eat fruit
*/e.off('eat', eatfood);
e.emit('eat');
//eat fruit
fs模組提供了流操作的api。
流分為四類:可讀流、可寫流、雙工流(可讀可寫)、轉換流(壓縮檔案)
1. 可讀流
可讀流的作用:
1. 可以分段讀取檔案2. 可以控制讀取的速率和範圍
可讀流主要依賴於fs.createreadstream()方法。 例項訂閱on('data'), on('end')事件。涉及buffer.concat()方法。
const fs = require('fs');const path = require('path');
//相當於建立可讀流例項:new readstream
const rs = fs.createreadstream(path.resolve(__dirname,'./1.txt'), );
//內部監聽data訂閱,如果監聽到,內部觸發rs.emit('data');然後on的**函式才執行。是非同步操作。
let arr = ;//
儲存二進位制**段
rs.on('data', function
(chunk) );
//每2秒讀取一次
let timer = setinterval(() =>,2000)
//監聽完成事件
rs.on('end', function
() )
2. 可寫流
可寫流可以控制每次寫入的大小。主要有write(),end()方法。
const fs = require('fs');const path = require('path');
let ws = fs.createwritestream(path.resolve(__dirname, './2.txt'), )
//write只能寫入字串或者buffer
let flag = ws.write('abcdef', function
(err) );
console.log(flag);
//寫入的長度大於highwatermark
ws.end('結束');
//end方法之後不能再呼叫ewrite方法
通過流實現檔案拷貝。主要pipe方法。避免全部讀取到記憶體後再寫入的情況。
const fs = require('fs');const path = require('path');
let rs = fs.createreadstream(path.resolve(__dirname, './1.txt'), );
let ws = fs.createwritestream(path.resolve(__dirname, './2.txt'), );
rs.pipe(ws);
//模擬實現pipe方法
function
pipe(r,w) );
//單次寫入完成
ws.on('drain', function
()) rs.on('end', function
(err) ) }//
pipe(rs,ws);
nodejs 流寫入檔案
console.clear console.log 流寫入檔案 var fs require fs 建立乙個可以寫入的流,寫入到檔案 output.txt 中 var writerstream fs.createwritestream output.txt 使用 utf8 編碼寫入資料 writer...
事件流 事件冒泡和事件捕獲
通俗的說就是 元素觸發時,傳播的過程。冒泡型事件流 事件的傳播是從最具體的事件目標到最不具體的事件目標。即從dom樹的葉子到根。document 捕獲型事件流 事件的傳播是從最不具體的事件目標到最具體的事件目標。即從dom樹的根到葉子。document 事件流包括三個階段 事件捕獲階段 實際目標 在...
html文件流和事件流
文件流 標準文件流,float position relative absolute fixed可以脫離標準文件流 回歸標準文件流 flaot的元素,對父級元素設定overflow hidden或clear both,或者對flaot的元素同時使用clear both可以回歸文件流 事件流 使用者的...