Node.js - fs 模塊學習

fs 模塊 主要是提供一些操做 磁盤文件 的 api,基本上構建工具 都要用到 fs 去對文件進行 讀 和 寫。javascript

fs 模塊咋一看文檔,api賊多,簡直沒法直視。java

而後再看一下,發現其實能夠一分爲二,api大都分爲同步的和異步的,這樣分析就會以爲好多了。node

因而乎,半抄半寫的作了個 json 文件合併的小demo,功能就是讀取指定目錄下的 json 文件,而後寫到同一個 json 文件裏面去。shell

新建一個工做目錄,進入到 工做目錄後 npm init -y, 而後在目錄下新建一個名字爲 json 的文件夾,放幾個json文件進去。npm

再在工做目錄新建一個 index.js, 代碼以下:json

const fs = require('fs');
const path = require('path');

const exists = filePath => fs.existsSync(filePath);

// 獲取 命令行傳入的 json 目錄
const jsonPath = process.argv[2];

if (!jsonPath) {
    console.log('未傳入json目錄');
    process.exit(1);
}

const rootPath = path.join(process.cwd(), jsonPath);
const newFilePath = './data.json';

// 遍歷目錄下的 json 文件
function walkJsonFile(dirPath) {
    const files = fs.readdirSync(dirPath);
    const result = [];
    files.forEach(file => {
        const filePath = `${dirPath}/${file}`;
        const stat = fs.statSync(filePath);

        if ( stat.isFile() && (/\.json$/).test(file) ) {
            result.push(filePath);
        }
    });

    return result;
}

// 合併 json 文件內容 到 newJson 文件夾
function mergeJsonFile() {
    const files = walkJsonFile(rootPath);

    if (!files.length) process.exit(2);

    const data = files
        .filter(exists)
        .reduce((total, file) => {
            const fileData = fs.readFileSync(file);
            // 獲取文件名稱
            const baseName = path.basename(file, '.json');

            let fileJson
            try {
                fileJson = JSON.parse(fileData);
            } catch (err) {
                console.log(err);
            }
            
            total[baseName] = fileJson;

            // 若是不想區分 baseName, 直接合並便可
            // total = { ...total, ...fileJson };

            return total;
        }, {});

    fs.writeFileSync(newFilePath, JSON.stringify(data, null, 2));
}

mergeJsonFile();
複製代碼

在工做目錄下運行api

node index.js json
複製代碼

就能夠看到代碼被合併到新文件中了。異步

效果如圖:工具

參考ui

小冊:10+ 代碼案例掌握 NodeJS 核心基礎知識

相關文章
相關標籤/搜索