Node.js 编程实战:文件读写操作

作者:程序员爱钓鱼日期:2025/12/19

在后端开发中,文件读写是非常常见的需求,例如日志记录、配置文件管理、上传文件处理以及数据导入导出等。Node.js 提供了内置的 fs(File System)模块,使得我们可以高效地与文件系统进行交互。理解并掌握 Node.js 的文件读写方式,是每一个 Node.js 开发者的必备基础。


一、fs 模块简介

fs 模块是 Node.js 的核心模块之一,无需额外安装即可直接使用。它提供了同步和异步两套 API,用于完成文件的创建、读取、写入、删除以及目录操作等功能。

在实际开发中,Node.js 更推荐使用异步文件操作,因为同步方法会阻塞事件循环,影响服务器的并发处理能力。同步方法一般只适用于脚本工具或启动阶段的简单逻辑。


二、文件读取操作

1. 异步读取文件

异步读取是最常用的方式,通过回调函数在文件读取完成后处理结果。该方式不会阻塞主线程,适合高并发场景。

1const fs = require('fs');
2
3fs.readFile('example.txt', 'utf-8', (err, data) => {
4  if (err) {
5    console.error('读取失败:', err);
6    return;
7  }
8  console.log('文件内容:', data);
9});
10

这种方式适合读取体积较小的文件,如配置文件或文本内容。


2. 同步读取文件

同步读取会阻塞程序执行,直到文件读取完成,因此在 Web 服务中应尽量避免使用。

1const fs = require('fs');
2
3try {
4  const data = fs.readFileSync('example.txt', 'utf-8');
5  console.log(data);
6} catch (err) {
7  console.error(err);
8}
9

同步读取通常用于命令行工具或程序初始化阶段。


三、文件写入操作

1. 异步写入文件

异步写入文件会在文件不存在时自动创建文件,在文件存在时覆盖原有内容。

1const fs = require('fs');
2
3fs.writeFile('output.txt', 'Hello Node.js', 'utf-8', err => {
4  if (err) {
5    console.error('写入失败:', err);
6    return;
7  }
8  console.log('写入成功');
9});
10

这种方式适合生成日志、导出数据等场景。


2. 追加写入文件

如果希望在原有内容后追加数据,可以使用 appendFile 方法。

1fs.appendFile('log.txt', '新的一条日志\n', err => {
2  if (err) console.error(err);
3});
4

这是日志系统中非常常见的用法。


四、使用 Promise 与 async/await 操作文件

从 Node.js v10 开始,fs 模块提供了 fs.promises API,使文件操作更加现代化,也更易于错误处理。

1const fs = require('fs/promises');
2
3async function readFileAsync() {
4  try {
5    const data = await fs.readFile('example.txt', 'utf-8');
6    console.log(data);
7  } catch (err) {
8    console.error(err);
9  }
10}
11
12readFileAsync();
13

这种方式代码结构清晰,尤其适合复杂业务逻辑。


五、大文件读写与 Stream

当文件体积较大时,一次性读入内存会造成内存压力。这时应使用**流(Stream)**进行分段读写。

1const fs = require('fs');
2
3const readStream = fs.createReadStream('bigfile.txt');
4const writeStream = fs.createWriteStream('copy.txt');
5
6readStream.pipe(writeStream);
7

流的方式可以显著降低内存占用,非常适合处理视频、日志或大规模数据文件。


六、文件操作中的常见注意点

在实际开发中,需要特别注意以下问题:

  • 文件路径建议使用 path 模块拼接,避免跨平台问题
  • 文件操作需要做好错误处理,防止程序崩溃
  • 避免在高并发服务中使用同步文件 API
  • 大文件优先使用 Stream 方式处理

这些细节往往决定了系统的稳定性和性能表现。


七、总结

Node.js 的文件读写操作功能强大且灵活,从简单的文本读写到复杂的大文件流处理,都有成熟的解决方案。合理选择同步、异步或流式操作方式,不仅可以提升程序性能,还能让代码更加健壮。在实际项目中,结合业务场景选择合适的文件操作策略,是提升 Node.js 开发能力的重要一步。


Node.js 编程实战:文件读写操作》 是转载文章,点击查看原文


相关推荐


大模型 MoE,你明白了么?
吴佳浩2025/12/11

大模型 MoE,你明白了么? 最近被T4卡搞得有点抽风就多些一点关于大模型的讲解的。由浅至深的讲个透,愿天下用老旧显卡的人儿都可以远离傻*问题。 作者:吴佳浩 最后更新:2025-12-11 适用人群:大模型上下游相关从业者 ——以 Qwen2/Qwen3 为例,从入门到回家 1. 什么是 MoE(Mixture of Experts) 核心概念 MoE = 混合专家模型,它让模型由多个"专家网络"组成,每次推理只激活少量专家,从而实现: ✅ 保留大模型能力 - 总参数量大,能力强 ✅


使用 useSearchParams 同步 URL 和查询参数
mCell2025/12/2

同步至个人站点:useSearchParams 使用 useSearchParams 同步 URL 和查询参数 在开发 React 应用时,我们经常遇到一种场景:用户在搜索框输入关键词,筛选出一个列表,然后希望把这个结果分享给同事。 如果我们将筛选条件仅仅保存在组件的 useState 中,一旦刷新页面或复制链接,这些状态就会丢失,用户看到的只能是初始页面。 为了解决这个问题,我们需要将状态“提升”到 URL 的查询参数(Query Params)中。在 React Router v6 中,u


前端开发者使用 AI 的能力层级——从表面使用到工程化能力的真正分水岭
月亮有石头2025/12/28

很多前端开发者已经在“使用 AI”: 会问问题、会让 AI 写代码、甚至在 IDE 里和 AI 对话。 但如果这些使用方式 无法稳定地产出可运行、可验证、可回归的工程结果, 那么严格来说——其实还没有真正入门。 这篇文章想系统回答一个问题: 前端开发者“使用 AI”的能力,是有明确层级和分水岭的。 不是工具多不多,也不是模型新不新, 而是:你用 AI 的方式,决定了它在你工程体系里的角色。 把 AI 放进工程链路,用工程约束对抗幻觉,用验证与反馈逼近真实。 AI 工程化的本质,并不是让模型


Rust 的 `PhantomData`:零成本把“语义信息”交给编译器
Pomelo_刘金2026/1/5

在写底层 Rust(尤其是 unsafe / 裸指针 / FFI)时,你会遇到一种常见矛盾: 运行时:你手里可能只有一个 *const T / *mut T / *mut c_void(比如外部库返回的句柄),结构体里并没有真正存放某个引用或某个类型的值。 编译期:你又希望编译器知道“我这个类型和某个生命周期/类型绑定”,从而帮你做借用检查、推导 Send/Sync、避免错误混用等。 std::marker::PhantomData<T> 就是为了解决这个问题而存在的工具。官方文档的核心定义


【计算机网络 | 第三篇】MAC地址与IP地址
YYYing.2026/1/14

目录 MAC地址 一、MAC地址的格式特征 二、MAC地址的获取 三、什么是ARP? 四、ARP缓存 五、RARP IP地址 一、为什么要有IP地址? 二、既然IP地址存在,那它的意义是什么? 三、那又如何表示呢? 1、IP地址的定义 2、IPv4地址的表示方法 2.1、IPv4地址的分类编址方法 2.2、IPv4地址的划分子网编址方法 2.2.1、为什么要划分子网? 2.2.2、怎么划分子网? 2.2.3、总结 2.3、IPv4地址的无分类编址方法 3、构


RPC分布式通信(3)--RPC基础框架接口
陌路202026/1/22

一、MprpcApplication 核心职责 MprpcApplication是 RPC 框架的 “管家”,核心作用: 单例模式:全局唯一实例,避免重复初始化; 配置加载:解析 RPC 框架的配置文件(如服务器 IP、端口、日志路径、注册中心地址等); 框架初始化:启动时初始化日志、网络、注册中心等核心组件; 全局参数访问:提供接口获取配置参数(如获取服务器端口、注册中心地址); 框架销毁:程序退出时释放资源。 二、MprpcApplication 核心接

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客