档案

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