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 |