Featured image of post 【Node.js 檔案】所有檔案函式、檔案例外處理、同步處理檔案、串流讀寫檔案

【Node.js 檔案】所有檔案函式、檔案例外處理、同步處理檔案、串流讀寫檔案

【Node.js 檔案】所有檔案函式、檔案例外處理、同步處理檔案、串流讀寫檔案

Photo by Mohammad Rahmani on Unsplash

檔案函式說明

變數 說明
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');
    });
}

Donate KJ 贊助作者喝咖啡

如果這篇文章對你有幫助的話,可以透過下面支付方式贊助作者喝咖啡,如果有什麼建議或想說的話可以贊助並留言給我
If this article has been helpful to you, you can support the author by treating them to a coffee through the payment options below. If you have any suggestions or comments, feel free to sponsor and leave a message for me!
方式 Method 贊助 Donate
PayPal https://paypal.me/kejyun
綠界 ECPay https://p.ecpay.com.tw/AC218F1
歐付寶 OPay https://payment.opay.tw/Broadcaster/Donate/BD2BD896029F2155041C8C8FAED3A6F8
All rights reserved,未經允許不得隨意轉載
Built with Hugo
Theme Stack designed by Jimmy