MST

星途 面试题库

面试题:Node.js 文件复制实现细节

请用Node.js编写一个函数,实现将一个文件从源路径复制到目标路径。在实现过程中,请考虑处理文件读取和写入的错误,并说明如何使用流来优化性能。
38.4万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
const fs = require('fs');
const path = require('path');
const { pipeline } = require('stream');
const util = require('util');

const copyFile = async (sourcePath, targetPath) => {
    try {
        const readableStream = fs.createReadStream(sourcePath);
        const writableStream = fs.createWriteStream(targetPath);

        await util.promisify(pipeline)(readableStream, writableStream);
        console.log('文件复制成功');
    } catch (err) {
        console.error('文件复制失败:', err.message);
    }
};

// 示例调用
copyFile('source.txt', 'target.txt');

使用流优化性能说明

  1. 创建可读流fs.createReadStream(sourcePath) 会创建一个可读流,它不会一次性将整个文件读入内存,而是按块读取,这样可以显著减少内存的使用,特别适合处理大文件。
  2. 创建可写流fs.createWriteStream(targetPath) 创建一个可写流,用于将读取到的数据块按顺序写入目标文件。
  3. 管道操作pipeline 方法将可读流和可写流连接起来,它会自动处理数据从可读流到可写流的流动,并且会在数据传输完成或者出错时进行相应的处理。util.promisify(pipeline)pipeline 方法转化为返回 Promise 的形式,使得我们可以使用 async/await 来优雅地处理异步操作和错误。通过这种方式,数据可以高效地从源文件传输到目标文件,而不会占用过多内存。