Node核心模塊之fs模塊

一、同步與異步

文件I/O是NodeJS的核心模塊之一,主要歲文件進行讀寫操作。fs對文件的加載分爲兩種:同步和異步

  • 同步方式:執行完當前操作並返回結果後,才能繼續執行後續代碼
var fs = require('fs');
fs.unlinkSync('/targetUrl');
  • 異步方式:採用回調函數的方式,接收返回結果,可以立即執行後續的代碼;回調函數的第一個參數是異常參數,如果方法成功執行,那麼這個參數爲“null”局歐哲“undefined”
var fs require('fs');
fs.unlink('/targetUrl',function(err) {
    if(err) {
        throw err;
    }
});
  • 異步與同步加載的對比
var fs = require('fs');
fs.readFile('test.txt','utf-8',function(err,data) {
    if(err) {
        throw err;
    } else {
       console.log(data); 
    }
});
console.log('異步加載');

運行結果爲: 異步加載
data of test.txt

如果是同步執行,那麼執行結果的順序應該是相反的。

二、讀寫文件

1.eadFile讀取文件

fs.readFile(fileName[,options],callback);

fileName爲要讀取的文件名稱;
options是可選參數,是一個對象格式,用於指定文件編碼(encoding)和操作方式(flag,例如:r代表讀取文件,w代表寫入文件,a代表追加文件)

fs.readFile('/test.txt','utf-8',function(err,data) {
    //或者{encoding:'utf-8'}
    if(err) {
        console.log(err);
    }
    console.log(data);
});

2.writeFile寫入文件
writeFile與readFile差不多,語法規則爲

fs.writeFile(fileName,data[,options],callback);

其中,data爲寫入文件的數據內容,callback爲寫入後的回調函數。

以追加的方式寫入文件
fs.writeFile('/rest.txt','data add to file',{'flag': 'a'},function(err) {
    if(err) {
        console.log(new Error('error'));
    }
});

對寫入的文件進行讀取

fs.readFile('/test.txt','utf-8',function(err,data) {
    if(err) {
        console.log(new Error('read err'));
    }
    console.log(data);
});

3.read和write讀寫文件
除了使用readFile和writeFile讀寫文件之外,還可以使用read和write來對文件進行讀寫操作。

  • 打開文件 fs.open()
fs.open(path,flag[,mode],callback)

path是文件路徑;
flags是打開文件的方式;可以是:
r:只讀方式打開文檔
r+:讀寫方式打開文檔
rs:同步模式下,以只讀方式打開文檔

mode:文件權限(該文件已經存在的條件下),默認值爲“0666”,即有可讀寫功能。

  • 關閉文件 fs.close()
fs.close(fd[,callback])

fd爲所打開文件的描述符

  • 讀取文件 fs.read()
fs.read(fd,buffer,offset,length,position,callback)

fd:文件描述符,必須接收fs.open()方法中的回調函數所返回的第二個參數;
buffer:存放讀取到的數據的Buffer對象;
offset:指定向buffer中存放數據的起始位置;
length:指定讀取文件的字節數;
position:指定在文件中讀取內容的起始位置;
callback:回調函數

fs.open('/test.txt','r'.function(err,fd) {
    if(err) {
        throw err;
    }
    var buffer = new Buffer(255);
    //讀取文件
    fs.read(fd,buffer,0,10,0,function(err,byteRead,buffer) {
        if(err) {
            throw err;
        }
        console.log(byteRead,buffer.slice(0,byteRead).toString());
        fs.close(fd);    //關閉文件
    });
});

callback回調函數的參數:
err:異常
byteRead:是從文件中讀取內容的實際字節數;
buffer:被讀取的緩存區對象;

  • 寫入文件 fs.write()
fs.write(fd,buffer,offset,length,position,callback);

基本參數與read()函數差不多,其中,buffer爲要寫進文件的內容

fs.open('/test.txt','r'.function(err,fd) {
    if(err) {
        throw err;
    }
    var buffer = new Buffer('the information add into file');
    //讀取文件
    fs.write(fd,buffer,0,10,0,function(err,byteRead,buffer) {
        if(err) {
            throw err;
        }
        console.log(byteRead,buffer.slice(0,byteRead).toString());
        fs.close(fd);    //關閉文件
    });
});
  • 追加寫入 fs.appendFile()
fs.appendFile('test.txt','data to addto file',function(err) {
    if(err) {
        throw err;
    }
});

參考文章:匯智網-Node.js入門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章