代碼示例:
下方的示例是同步和異步的不一樣操做,註釋的爲異步的,未註釋的是同步的操做
操做內容爲,打開一個文件,若文件夾中沒有,會本身建立,而後第二個參數是flag,能夠選擇寫’w’或者讀’r’等其餘操做,可是若寫了‘r’,要讀取這個文件可是沒有時會報錯 r: ENOENT: no such file or directory, open ‘hao1.txt’node
//引入fs模塊 let fs = require('fs'); //同步打開demo1.txt文件,寫入得操做,在這裏,若沒有demo1文件,會本身建立 let fd = fs.openSync('demo1.txt','w'); //這是異步打開文件的操做,一樣執行寫的操做,與同步不一樣是有回調函數,err是失敗,fd是表明所打開的文件,在node.js中異步操做是沒有返回值一說的,若想在打開的文件成功後,進行下一步操做,好比寫入並關閉文件,是必須放在打開文件的回調函數中的,不然就會報錯 // fs.open('demo1.txt', 'w', function (err, fd) { // if (err) { // console.log(err) // } else { // console.log('chulaioloohdfiduh') // // console.log(fd) //在打開文件成功後寫入文件 // fs.writeFile(fd, 'gfglSJbfSBdjabsdhasdasdbajsgdjssdsdhsdkfdkfkdksfdfdhkdhfdk', (err) => { // if (err) throw err; // console.log('保存了')00 //寫完文件關閉這個文件,異步執行,有回調函數 // fs.close(fd, (err) => {console.log(222)}) // }); // } // }); //同步寫入文件 fs.writeFileSync(fd,'我只願面朝大海,春暖花開'); //寫入文件後關閉這個打開的文件 fs.closeSync(fd);
讀取文件異步操做的示例代碼:web
//引入fs模塊 let fs = require('fs');, //讀取wenjian.text文件,沒有的話會報錯,異步請求有callback,err是錯誤,data是讀取的二進制數據 fs.readFile('wenzi.text',(err,data)=>{ if(!err){ //若是成功調用下列代碼 console.log(data) console.log(data.toString()) }else{ //失敗就拋出異常,具體代碼操做按實際需求來寫 throw err } })
demo需求:讀取本地圖片文件,而後寫入到當前文件的同一路徑下異步
//引入fs模塊 let fs = require('fs');, //首先讀取圖片文件,異步操做,有回調函數 fs.readFile('d:\\Users\\Administrator\\Desktop/1.png', (err,data)=>{ //若是成功的話 if(!err){ //將讀出的data數據,寫入當前目錄下,並起名爲img.png fs.writeFile('./img.png',data,(err)=>{ if(err){ throw err }else{ console.log(data) } }) }else{ throw err } })
建立讀取流
首先,要了解流的做用:在於文件太大,讀取過久,或者上傳過久,影響體驗,實際上是影響代碼的運行,變相增長運行時間;讀取操做會放在內存中,若無其餘操做會當即釋放,但若文件過多或過大,會佔用內存。容易宕機,因此Stream流是頗有必要使用的svg
//引入fs模塊 let fs = require('fs'); //建立一個讀取流 var wl = fs.createReadStream('test1.txt') //監聽open讀取流打開的事件 wl.once('open',()=>{ console.log('建立讀取流....') }) //監聽讀取流.關閉的事件 wl.once('close',()=>console.log('關閉讀取流....')) console.log(wl) //關閉讀取流 wl.end()
讀取流和寫入流的使用,demo要求:讀取一個本地的mp3文件,而後寫入到當前路徑下的test.mp3函數
//建立讀取流,讀取一個本地的mp3文件,而後寫入到當前路徑下的test.mp3 //引入fs模塊 let fs = require('fs'); //建立一個讀取流 var rs = fs.createReadStream('D:/Program Files/騰訊遊戲/英雄聯盟/TCLS/music/sound.mp3') //建立一個寫入流 var ws = fs.createWriteStream('test.mp3') //監聽open讀取流打開的事件 rs.once('open', ()=>{ console.log('讀取stream打開了') }) //監聽讀取流關閉的事件 rs.once('close', ()=>{ console.log('duqu讀取stream 關閉了了') }) //監聽寫入流打開的事件 ws.once('open', ()=>{ console.log('寫入stream打開了') }) //監聽寫入流關閉的事件 ws.once('close', ()=>{ console.log('寫入stream 關閉了了') }) //第一個data是讀取流的data事件,後面的data是讀取流讀到的信息 rs.on('data',(data)=>{ console.log(data) ws.write(data) //將讀取來的data數據寫入到寫入流中 })
還有一種方法,是對上面讀寫流的一種封裝,rs有個方法叫pipe();運行效果與上面相同,咱們能夠讀寫一個mp4文件,詳見代碼:ui
// 引入模塊 let fs = require('fs'); // 建立讀入流 var rs = fs.createReadStream('C:\\Users\\admin\\Desktop\\img\\test.mp4'); var ws = fs.createWriteStream('liu.mp4'); // 建立管道 ,直接把ws放進去,就會看到文件夾出現了一個mp4 rs.pipe(ws);
本文同步分享在 博客「zoepriselife316」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。.net