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 开发能力的重要一步。

相关推荐
涡能增压发动积1 天前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨1 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz1 天前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
从前慢丶1 天前
前端交互规范(Web 端)
前端
tyung1 天前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
CHU7290351 天前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing1 天前
Page-agent MCP结构
前端·人工智能