面试题答案
一键面试const fs = require('fs');
const path = require('path');
function writeLargeFileInChunks(inputFilePath, outputFilePath, chunkSize = 1024 * 1024) {
const readStream = fs.createReadStream(inputFilePath, {
highWaterMark: chunkSize
});
const writeStream = fs.createWriteStream(outputFilePath);
readStream.on('data', (chunk) => {
writeStream.write(chunk);
});
readStream.on('end', () => {
writeStream.end();
});
writeStream.on('finish', () => {
console.log('文件已成功写入');
});
readStream.on('error', (err) => {
console.error('读取文件时出错:', err);
});
writeStream.on('error', (err) => {
console.error('写入文件时出错:', err);
});
}
// 示例调用
const inputFile = path.join(__dirname, 'largeFileToRead.txt');
const outputFile = path.join(__dirname, 'largeFileWritten.txt');
writeLargeFileInChunks(inputFile, outputFile);
上述代码的主要逻辑如下:
- 引入模块:通过
require
引入fs
模块用于文件操作,path
模块用于处理文件路径。 - 定义函数:
writeLargeFileInChunks
函数接收输入文件路径、输出文件路径以及可选的分块大小参数(默认为1MB)。 - 创建可读流和可写流:
fs.createReadStream
创建可读流,并设置highWaterMark
为分块大小,这决定了每次从文件读取的数据量。fs.createWriteStream
创建可写流用于写入目标文件。
- 事件处理:
readStream
的data
事件,当有数据可读时,将数据写入writeStream
。readStream
的end
事件,当可读流读取完毕,结束writeStream
写入。writeStream
的finish
事件,当写入操作完成,打印成功信息。readStream
和writeStream
的error
事件,捕获并打印读取或写入过程中的错误信息。
- 示例调用:在函数外部定义输入输出文件路径并调用
writeLargeFileInChunks
函数实现分块写入大文件。