檔案
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');
});
}