檔案

Node.js 檔案

檔案函式說明

變數 說明
fs.readFile() 讀取檔案
fs.writeFile() 寫入檔案
fs.appendFile() 加入檔案
fs.rename() 重新命名檔名
fs.unlink() 刪除檔案
fs.createReadStream() 建立串流讀取
fs.createWriteStream() 建立串流寫入
fs.mkdir() 建立目錄
fs.rmdir() 移除目錄
fs.existSync() 檔案或目錄是否存在

檔案例外處理

const fs = require('fs');

fs.readFile('unknown.json', 'utf8', (error, data) => {
    if (error) throw error
    console.log(data.toString());
});

process.on('uncaughtException', error => {
   console.error(`Got error: ${error}`);
   process.exit(1);
});

同步處理檔案

讓操作流程照步驟一步一步走,不會像 async 跳著做發生無法預期的狀況

在檔案套件加入 promises 即可使用同步操作

const fsPromises = require(‘fs’).promises;

const path = require('path');
const fsPromises = require('fs').promises;

const fileOperation = async () => {
    try {
        // 讀取檔案
        const data = await fsPromises.readFile(path.join(__dirname, 'kj.json'), 'utf8');
        console.log(data);
        // 寫入檔案
        await fsPromises.writeFile(path.join(__dirname, 'promiseWrite.txt'), data);
        // 加入檔案
        await fsPromises.appendFile(path.join(__dirname, 'promiseWrite.txt'), '\n\nNice to meet you');
        // 重新命名檔案
        await fsPromises.rename(path.join(__dirname, 'promiseWrite.txt'), path.join(__dirname, 'promiseWriteRename.txt'));
    } catch (error) {
        console.error(error);
    }
}

fileOperation();

串流讀寫檔案

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

const rs = fs.createReadStream(path.join(__dirname, 'lorem.txt'), {
    encoding : 'utf8'
})

const ws = fs.createWriteStream(path.join(__dirname, 'new-lorem.txt'))

// 方法 1: 聽事件
rs.on('data', (dataChunk) => {
    ws.write(dataChunk);
});

// 方法 2,直接指定寫入
rs.pipe(ws);

檔案目錄是否存在 existsSync

if (!fs.existsSync('./new')) {
    fs.mkdir('./new', (error) => {
       if (error) throw error;
       console.log('Directory created');
    });
}

if (fs.existsSync('./new')) {
    fs.rmdir('./new', (error) => {
       if (error) throw error;
       console.log('Directory deleted');
    });
}