node.js-fs讀取文件與寫入文件示例demo

代碼示例:
下方的示例是同步和異步的不一樣操做,註釋的爲異步的,未註釋的是同步的操做
操做內容爲,打開一個文件,若文件夾中沒有,會本身建立,而後第二個參數是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

相關文章
相關標籤/搜索