1. 程式人生 > >NodeJS系列之三:NodeJS內建fs模組初識

NodeJS系列之三:NodeJS內建fs模組初識

1.fs模組介紹

fs全稱是file system(檔案系統),它是NodeJS提供的檔案操作API。fs模組用於對系統檔案及目錄進行讀寫操作,是一個非常重要的模組,對檔案的操作都基於它。該模組的所有方法都有同步和非同步兩種方式,下面先簡單介紹一下fs模組的常用方法。

2.使用fs模組進行簡單的讀寫操作

  1. 讀取檔案 => readFile(非同步讀取) 和 readFileSync(同步讀取)
 fs.readFile(file_name[, options],function(err,data){
     //非同步讀取帶兩個必選引數和一個可選引數
     //必選引數:file_name檔案路徑名,callback回撥函式,回撥函式第一個引數是讀取錯誤資訊,第二個是檔案裡面的資料
//一個可選引數:options該引數是一個物件,包含 {encoding, flag}。預設編碼為二進位制, flag 為 'w' }) fs.readFileSync(file_name[, options])//同步讀取帶一個必選引數和一個可選引數,同上
簡單實現如下:
var fs=require('fs');   //引入fs模組
//非同步讀取
fs.readFile('aaa.txt',function(err,data){
    if(err){
        console.log('讀取錯誤');
    }else{
        console.log('非同步讀取:'
+data.toString());//因為data返回二進位制資料,需要使用toString()方法轉換 或者 可選引數填入文字編碼 utf-8 } }); fs.readFile('aaa.txt','utf-8',function(err,data){ if(err){ console.log('讀取錯誤'); }else{ console.log('非同步讀取:'+data); } }); //同步讀取 var data=fs.readFileSync('aaa.txt'); console.log('同步讀取:'+data.toString()); var
data=fs.readFileSync('aaa.txt','utf-8'); console.log('同步讀取:'+data);

結果展示如下:
這裡寫圖片描述
2. 寫入檔案 => writeFile(非同步寫入)和writeFileSync(同步寫入)
writeFile()直接開啟檔案預設是 w 模式,所以如果檔案存在,該方法寫入的內容會覆蓋舊的檔案內容,檔案不存在即建立新檔案

fs.writeFile(file_name,data[, options],function(err){
     //非同步寫入帶三個必選引數和一個可選引數
     //三個必選引數:file_name檔名,data寫入的檔案資訊,function一個回撥函式,回撥函式帶的引數是寫入錯誤資訊
     //一個可選引數:options該引數是一個物件,包含 {encoding, mode, flag}。預設編碼為 utf8, 模式為 0666 , flag 為 'w'
 })
 fs.writeFile(file_name,data[, options])//同步寫入帶二個必選引數和一個可選引數,引數含義如上少一個回撥函式
var fs=require('fs');
//非同步寫入
fs.writeFile('aaa.txt','寫入檔案資訊',function(err){
    console.log(err);
})
//同步寫入
fs.writeFileSync('aaa.txt','寫入檔案資訊');

結果展示:
這裡寫圖片描述

3.其他

。。。。。。

4.對模組的小實踐

在這裡將fs模組結合前面接觸的http模組做一個小整合,寫一個簡單的從伺服器建立到響應前臺查詢檔案並且做對應返回的小demo:

var http=require('http');
var fs=require('fs');
var querystring=require('querystring');
var urlLib=require('url');
http.createServer(function(req,res){
    //GET請求解析資料
    var obj=urlLib.parse(req.url,true);
    var url=obj.pathname;
    var GET=obj.query;
    //POST請求解析資料
    var str='';
    res.on('data',function(data){
        str+=data;
    })
    res.on('end',function(){
        var POST=querystring(str);
    })
    //檔案請求
    var file_name='./www'+url;
    fs.readFile(file_name,function(err,data){
        if(err){
            res.write('404');//找不到檔案返回404
        }else{
            res.write(data);//找到檔案返回檔案資訊
        }
        res.end();
    })
}).listen(8080)

以上是我現在使用過的fs模組方法,後續使用到其他的會補充更新。