Node系統(tǒng)模塊(fs,path)

Node運(yùn)行環(huán)境提供的API. 因?yàn)檫@些API都是以模塊化的方式進(jìn)行開發(fā)的, 所以我們又稱Node運(yùn)行環(huán)境提供的API為系統(tǒng)模塊

1.系統(tǒng)模塊fs 文件操作

f:file 文件 ,s:system 系統(tǒng),文件操作系統(tǒng)。

//引入文件模塊
const fs = require('fs');
1.1 讀取文件內(nèi)容
  • fs.reaFile('文件路徑/文件名稱'[,'文件編碼'], callback);
    代碼示例
//引入fs模塊
const fs = require('fs');
//通過模塊內(nèi)部的readFile讀取文件內(nèi)容
fs.readFile('./1.helloword.js', 'utf8', (err, doc) => {
    // 如果文件讀取出錯err 是一個對象 包含錯誤信息
    // 如果文件讀取正確 err是 null
    // doc 是文件讀取的結(jié)果
    console.log('>>>>>'+err);
    console.log(doc);
});
1.2 寫入文件內(nèi)容
  • fs.writeFile('文件路徑/文件名稱', '數(shù)據(jù)', callback);
    代碼示例
const fs = require('fs');
fs.writeFile('./helloword.txt', '我是寫入的數(shù)據(jù)', err => {
    if (err != null) {
        console.log(err)
        return;
    }
    console.log('文件寫入成功');
});
1.3 讀取文件夾
  • fs.readdir('文件路徑/文件名稱', 對象, callback);
  • dirent是通過fs獲取到的一個文件對象
  • dirent.isDirectory() 判斷是否是一個文件夾
  • dirent.isFile() 判斷是否是一個文件
  • dirent.name 返回文件或者文件夾的名稱
    代碼示例
//引入fs模塊
const fs = require('fs');
//讀取文件夾
fs.readdir('./gulp-demo',{withFileTypes:true}, function (err, dir) {
    if (err != null) {
        console.log(err);
        return;
    }
    // fs.Dirent 類
    // 1)dirent.isDirectory() 判斷是否是一個文件夾
    // 2)dirent.isFile() 判斷是否是一個文件
    // 3)dirent.name 返回文件或者文件夾的名稱
    for (var i in dir) {
        console.log(dir[i].name+'------'+dir[i].isDirectory()+'-------'+dir[i].isFile());
    }
});
dist------true-------false
glup相關(guān)方法.txt------false-------true
gulpfile.js------false-------true
node_modules------true-------false
src------true-------false
1.4 文件監(jiān)聽

fs.watch(filename[, options][, listener])

  • 成功調(diào)用 fs.watch 方法將返回一個新的 fs.FSWatcher 對象。所有 fs.FSWatcher 對象每當(dāng)修改指定監(jiān)視的文件,就會觸發(fā) 'change' 事件
// 引入fs模塊
const fs = require('fs');
//eventType 可以是 'rename' 或 'change'
//當(dāng)改名或出現(xiàn)或消失的時候觸發(fā)rename
//recursive:是否監(jiān)聽到內(nèi)層子目錄,默認(rèn)false;
let myWatch = fs.watch('./watch', {encoding: 'utf8', recursive: true}, (event, filename) => {
    if (event == 'change') {
        console.log(event + 'change事件觸發(fā)了')
    }
    if (event == 'rename') {
        console.log(event + 'rename事件觸發(fā)了')
    }
    //encoding:文件名編碼格式,buffer、默認(rèn):utf8等;
    //filename有可能為空
    if (filename) {
        console.log('filename:::', filename)
    }
});
//change 事件會觸發(fā)多次  監(jiān)聽事件注冊
myWatch.on('change', function (err, filename) {
    console.log(filename + '發(fā)生變化');
});
//5秒后關(guān)閉監(jiān)視
setTimeout(function () {
    myWatch.close();
},5000);

fs 相關(guān)api文檔地址請點(diǎn)擊

2. 系統(tǒng)模塊path 路徑操作

2.1 路徑拼接語法
  • path.join('路徑', '路徑', ...)
    代碼示例
//引入path模塊
const path = require('path');
//路徑拼接
var finalPath = path.join('public', 'upload', 'avatar','a.jpg');
//輸出結(jié)果public\upload\avatar\a.jpg
console.log(finalPath);
2.2 相對路徑VS絕對路徑
  • 大多數(shù)情況下使用絕對路徑,因?yàn)橄鄬β窂接袝r候相對的是命令行工具的當(dāng)前工作目錄
  • 在讀取文件或者設(shè)置文件路徑時都會選擇絕對路徑
  • 使用__dirname獲取當(dāng)前文件所在的絕對路徑
    代碼示例
//引入fs模塊
const fs = require('fs');
//引入path模塊
const path=require('path');
console.log(__dirname);
console.log(path.join(__dirname,'1.helloword.js'));
fs.readFile(path.join(__dirname,'1.helloword.js'), 'utf8', (err, doc) => {
    console.log(err);
    console.log(doc)
});

path 相關(guān)api文檔地址請點(diǎn)擊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容