Node 文件系統模塊

1.Node.js 文件系統(fs 模塊)模塊中的方法均有異步和同步版本
例如讀取文件內容的函數有異步的 fs.readFile() 和同步的 fs.readFileSync()。
2.異步的方法函數最後一個參數爲回調函數,回調函數的第一個參數包含了錯誤信息(error)。
3.建議使用異步方法,比起同步,異步方法性能更高,速度更快,而且沒有阻塞

非阻塞:使用異步方法,讀取和後續代碼同時執行
阻塞:使用同步方法,等待讀取完成後,再去執行後續

  1. 讀取文件

Server.js:

//運行服務端,配置端口
module.exports=function(app){
    let http=require("http");
    http.createServer(app).listen(3100);
}

app.js:

  • writeHead 讀取文件(一次性讀取):
let fs=require("fs");

//傳入回調函數返回
let app=require("./node_modules/Server/Server");
app(function(req,res){
    if(req.url!="/favicon.ico"){
        res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
        res.write("服務器");

        //使用異步讀取服務端文件
        let content="";
        let promise=new Promise(function(resolve){
            fs.readFile("./data.txt",function(err,data){
                if(err) throw err;
                //讀取出來的數據爲buffer  需要使用toString
                content=data.toString();
                resolve(content);  //後執行
            });
        });
        //readFile爲異步讀取,使用Promise異步編程實現同步讀取
        promise.then(function(data){
            console.log(data);
        });
        //使用同步讀取服務端文件
        let text=fs.readFileSync("./data.txt");
        console.log(text.toString());  //先執行
        res.end();
    }
});

注:路徑兩種寫法:./data.txtE:/node/node02/bases.txt

  • read 讀取文件(讀取文件前需先打開,打開之後寫入到緩衝區,然後從緩衝區轉換出來)

優點:數據較多時,可以分段讀取,第二段爲第一段的結尾

(1)異步模式下讀取文件的語法格式:fs.read(fd, buffer, offset, length, position, callback)

(2)參數使用說明如下:

fd - 通過 fs.open() 方法返回的文件描述符。
buffer - 數據寫入的緩衝區。
offset - 緩衝區寫入的寫入偏移量。
length - 要從文件中讀取的字節數。
position - 文件讀取的起始位置,如果 position 的值爲 null,則會從當前文件指針的位置讀取。
callback - 回調函數,有三個參數err, bytesRead, buffer,err 爲錯誤信息, bytesRead 表示讀取的字節數,buffer 爲緩衝區對象。
//創建buffer  緩衝區
let buf=new Buffer.alloc(1024);
fs.open("./list/data.txt","r+",function(err,fd){
    if(err) throw err;
    console.log("文件打開完成");
    fs.read(fd,buf,0,buf.length,0,function(error,bytes){
        if(error) throw err;
        console.log(buf.slice(0,bytes).toString());
        //讀取完成後,關閉文件流
        fs.close(fd,function(cerr){
            if(cerr) throw err;
            console.log("文件關閉完成");
        });
    });
 });
  1. 打開文件

(1)在異步模式下打開文件的語法格式:fs.open(path, flags[, mode], callback)

(2)參數使用說明如下:

path - 文件的路徑。
flags - 文件打開的行爲。具體值詳見下文。
mode - 設置文件模式(權限),文件創建默認權限爲 0666(可讀,可寫)。
callback - 回調函數,帶有兩個參數如:callback(err, fd)。

(3)flags 參數可以是以下值:

在這裏插入圖片描述

//打開文件
console.log("準備打開文件");
fs.open("./list/stu.txt","r+",function(err,fd){
    if(err) throw err;
    console.log("打開文件成功",fd); 
});
  1. 獲取文件信息

(1)通過異步模式獲取文件信息的語法格式:fs.stat(path, callback)

(2)參數使用說明如下:

path - 文件路徑。
callback - 回調函數,帶有兩個參數如:(err, stats), stats 是 fs.Stats 對象。

(3)stats類中的方法有:
在這裏插入圖片描述

//stat  判斷當前的文件是什麼類型
fs.stat("./list",function(err,stat){
    if(err) throw err;
    console.log(stat.isFile(),stat.isDirectory());  //false  true
});
  1. 文件寫入

(1)異步模式下寫入文件的語法格式:fs.writeFile(file, data[, options], callback)
(2)參數使用說明如下:

file - 文件名或文件描述符。
data - 要寫入文件的數據,可以是 String(字符串) 或 Buffer(緩衝) 對象。
options - 該參數是一個對象,包含 {encoding, mode, flag}。默認編碼爲 utf8, 模式爲 0666 , flag 爲 'w'
callback - 回調函數,回調函數只包含錯誤信息參數(err),在寫入失敗時返回。

覆蓋型寫入:

//異步寫入文件  
let data="我是寫入的數據————更新的數據"
fs.writeFile("./list/stu.txt",data,function(err){
    if(err){
        console.log("文件寫入失敗");
    }
    console.log("文件寫入成功");
});
//同步寫入文件
let su=fs.writeFileSync("./list/stu.txt",data);
console.log(su);

追加式寫入;

//追加型寫入
let data="更新的數據\n"
fs.appendFile("./list/stu.txt",data,function(err){
    if(err){
        console.log("文件寫入失敗");
    }
    console.log("文件寫入成功");
});
  1. 目錄

(1)創建目錄

//創建目錄
fs.mkdir("./list/sub",function(err){
    if(err) throw err;
    console.log("創建目錄成功");
});

(2)讀取目錄

//讀取目錄
fs.readdir("./list/sub",function(err,files){
    if(err) throw err;
    console.log(files);
});

(3)讀取固定目錄,判斷裏面的所有子目錄是文件還是文件夾

fs.readdir("./list/sub",function(err,files){
    if(err) throw err;
    //讀取的目錄文件進行遍歷
    for(let key in files){
        fs.stat("./list/sub/"+files[key],function(error,stat){
            if(error) throw err;
            console.log(stat.isFile());
            console.log(stat.isDirectory());
        });
    }
});

目錄:
在這裏插入圖片描述

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