• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Node.js进行文件读取与复制的系统总结

    发布者: 福建二哥 | 发布时间: 2025-6-16 07:39| 查看数: 137| 评论数: 0|帖子模式

    Node.js 文件读取与复制相关内容的系统总结,包括 同步读取、异步读取、流式读取、复制操作、两者对比及内存测试。

    一、Node.js 文件读取方式总结

    Node.js 使用 fs(文件系统)模块进行文件操作:

    1.同步读取(Blocking)
    1. const fs = require('fs');
    2. const data = fs.readFileSync('file.txt', 'utf-8');
    3. console.log(data);
    复制代码
    ✅ 优点:逻辑简单,适合初始化配置、命令行工具等无需并发场景。
    ❌缺点:阻塞线程,读取大文件会卡住整个应用。
    当然可以!下面是一个使用 Node.js 同步方式进行文件复制的完整例子,先同步读取文件内容,再同步写入到目标文件。
    示例:使用 fs.readFileSync + fs.writeFileSync 实现文件复制
    1. const fs = require('fs');

    2. try {
    3.   // 同步读取源文件内容
    4.   const data = fs.readFileSync('source.txt', 'utf-8');

    5.   // 同步写入到目标文件
    6.   fs.writeFileSync('target.txt', data);

    7.   console.log('文件复制成功 ✅');
    8. } catch (err) {
    9.   console.error('复制失败 ❌', err);
    10. }
    复制代码
    说明:

    • fs.readFileSync(path, encoding):阻塞方式读取文件内容
    • fs.writeFileSync(path, data):阻塞方式将内容写入文件
    • 适合小型文本文件复制(例如:配置文件、日志等)
    注意:
    会阻塞事件循环,若文件大或复制频繁,不适合用在服务端生产环境。
    大文件建议使用流式复制方式。

    2. 异步读取(Non-blocking)
    1. const fs = require('fs');
    2. fs.readFile('file.txt', 'utf-8', (err, data) => {
    3.   if (err) throw err;
    4.   console.log(data);
    5. });
    复制代码

    • ✅ 优点:非阻塞、适合高并发,不会卡住主线程。
    • ❌缺点:逻辑较复杂,需使用回调、Promise 或 async/await。

    3. 流式读取(Stream)
    1. const fs = require('fs');
    2. const readStream = fs.createReadStream('file.txt', 'utf-8');

    3. readStream.on('data', chunk => {
    4.   console.log('读取块:', chunk);
    5. });

    6. readStream.on('end', () => {
    7.   console.log('读取完成');
    8. });
    复制代码

    • ✅ 优点:适合读取大文件、低内存消耗
    • ❌缺点:实现复杂,处理逻辑需分块处理。

    二、读取场景对比

    方式适合场景特点同步读取小文件、本地 CLI 工具等简单,阻塞线程异步读取Web 服务、文件上传非阻塞,高性能流式读取视频、大型日志、备份等节省内存,分块
    三、Node.js 文件复制方式


    1. 同步复制
    1. const fs = require('fs');
    2. fs.copyFileSync('source.txt', 'target.txt');
    复制代码
    ✅ 简单,适合少量小文件。
    ❌阻塞线程,大量并发时不可用。

    2. 流式复制(推荐)
    1. const fs = require('fs');
    2. const readStream = fs.createReadStream('source.txt');
    3. const writeStream = fs.createWriteStream('target.txt');

    4. readStream.pipe(writeStream);
    复制代码
    ✅ 非阻塞,适合大文件。
    ✅ 边读边写,内存占用低。
    ❌ 无法轻松控制复制进度或中断。

    四、复制方式对比

    方法内存占用性能使用场景同步复制高低小型项目、工具类流式复制低高服务端、大文件
    五、内存占用测试示例

    可以通过 process.memoryUsage() 查看 Node.js 内存使用:
    1. console.log(process.memoryUsage());
    复制代码
    示例:对比读取一个 500MB 文件时的内存变化:
    1. // 流式读取内存较低
    2. const stream = fs.createReadStream('bigfile.txt');
    3. stream.on('data', chunk => {
    4.   console.log(process.memoryUsage().heapUsed);
    5. });

    6. // readFileSync 读取整个文件占用大
    7. const content = fs.readFileSync('bigfile.txt');
    8. console.log(process.memoryUsage().heapUsed);
    复制代码
    总结重点

    功能同步异步流式阻塞✅ 是❌ 否❌ 否内存消耗❌ 高⚠️ 中✅ 低实现复杂度✅ 简单⚠️ 中等❌ 高适合场景启动、工具Web 服务大文件处理到此这篇关于Node.js进行文件读取与复制的系统总结的文章就介绍到这了,更多相关Node.js文件读取与复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/javascript/339783x0u.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表