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

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


一、fs 模块简介

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

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


二、文件读取操作

1. 异步读取文件

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

js 复制代码
const fs = require('fs');

fs.readFile('example.txt', 'utf-8', (err, data) => {
  if (err) {
    console.error('读取失败:', err);
    return;
  }
  console.log('文件内容:', data);
});

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


2. 同步读取文件

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

js 复制代码
const fs = require('fs');

try {
  const data = fs.readFileSync('example.txt', 'utf-8');
  console.log(data);
} catch (err) {
  console.error(err);
}

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


三、文件写入操作

1. 异步写入文件

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

js 复制代码
const fs = require('fs');

fs.writeFile('output.txt', 'Hello Node.js', 'utf-8', err => {
  if (err) {
    console.error('写入失败:', err);
    return;
  }
  console.log('写入成功');
});

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


2. 追加写入文件

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

js 复制代码
fs.appendFile('log.txt', '新的一条日志\n', err => {
  if (err) console.error(err);
});

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


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

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

js 复制代码
const fs = require('fs/promises');

async function readFileAsync() {
  try {
    const data = await fs.readFile('example.txt', 'utf-8');
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

readFileAsync();

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


五、大文件读写与 Stream

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

js 复制代码
const fs = require('fs');

const readStream = fs.createReadStream('bigfile.txt');
const writeStream = fs.createWriteStream('copy.txt');

readStream.pipe(writeStream);

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


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

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

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

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


七、总结

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

相关推荐
JarvanMo几秒前
终极指南:在 Flutter 中通过 sign_in_with_apple 实现 Apple 登录
前端
Learner6 分钟前
Python异常处理
java·前端·python
tao35566710 分钟前
VS Code登录codex,报错(os error 10013)
java·服务器·前端
6***830511 分钟前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
军军君0113 分钟前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
JarvanMo16 分钟前
情迷服务器驱动 UI:我在 Flutter 开发中的爱与哀愁
前端
tzy23318 分钟前
分享一个 HTTP(S) 代理&抓包工具,拦截和Mock Web客户端请求和服务端响应
前端·网络协议·http
代码小学僧24 分钟前
普通前端仔的 2025 : 年终总结与 AI 对我的影响
前端·程序员·ai编程
雪域迷影27 分钟前
Node.js中使用node-redis库连接redis服务端并存储数据
数据库·redis·node.js
Mike_jia30 分钟前
TCP 粘包/拆包问题
前端