JavaScript 文件系统操作:Node.js 完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 JavaScript (Node.js) 中处理文件系统



在现代 Web 开发中,JavaScript 早已超越了浏览器的范畴。借助 Node.js 平台,开发者能够创建服务器端应用程序、操作数据库,当然,还能与文件系统进行交互。读写、删除和移动文件的能力是任何后端开发者的关键技能之一。本文将详细讲解如何在 Node.js 中使用 JavaScript 处理文件系统,我们将使用内置模块 fs 及其现代的基于 Promise 的版本 fs/promises。



本文内容既适合刚开始学习 Node.js 的新手,也适合希望系统化知识的有经验的开发者。所有代码示例都可以在你的开发环境中运行。



引入 fs 模块及主要方法



在 Node.js 中,处理文件系统需要使用内置模块 fs (file system)。它无需单独安装——安装 Node.js 后即可使用。引入方式为标准方法:



const fs = require('fs');


然而,在现代 JavaScript (ES6+) 和 Node.js (从版本 14 开始) 中,推荐使用 ES modules 语法,并使用基于 Promise 的 fs/promises 版本。这可以避免“回调地狱”,并通过 async/await 编写更简洁的异步代码。



import * as fs from 'fs/promises';// 或者const fs = require('fs/promises');


fs 模块的主要方法分为三类:



  • 同步方法 — 会阻塞执行流 (例如 fs.readFileSync())。使用较少,主要用于初始化脚本。
  • 带回调的异步方法 — 传统的 Node.js 风格 (例如 fs.readFile())。
  • 基于 Promise 的异步方法 — 现代风格 (fs/promises)。推荐用于大多数任务。


在 Node.js 中读取文件



我们从最常见的操作开始——读取文件内容。我们将介绍两种方法:使用回调和使用 Promise。



通过回调读取 (传统方式)



const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.error('读取文件时出错:', err); return; } console.log('文件内容:', data);});


请注意:我们将编码 'utf8' 作为第二个参数传递。如果不指定,数据将以二进制缓冲区 (Buffer) 的形式返回。



通过 Promise 读取 (推荐方式)



import { readFile } from 'fs/promises';

async function readExample() { try { const data = await readFile('example.txt', 'utf8'); console.log('文件内容:', data); } catch (err) { console.error('读取文件时出错:', err); }}

readExample();


代码变得更清晰、更易理解。错误通过 try/catch 处理,这对于熟悉其他语言的开发者来说很习惯。



将数据写入文件



写入文件是第二重要的操作。在 Node.js 中有两个主要方法:writeFile (覆盖文件) 和 appendFile (将数据追加到文件末尾)。



覆盖文件



import { writeFile } from 'fs/promises';

async function writeExample() { try { await writeFile('output.txt', '你好,世界!', 'utf8'); console.log('文件写入成功'); } catch (err) { console.error('写入时出错:', err); }}

writeExample();


如果 output.txt 文件不存在,它会被自动创建。如果存在,其内容将被完全覆盖。

博客

书籍推荐