代码编织梦想

在Node.js中,fs模块提供了多种方法来写入和读取文件,使得数据的持久性保存变得简单。下面将介绍几种常用的文件写入方法,包括异步、同步写入、追加写入和流式写入,及异步读取、同步读取、流式读取等文件读取方法。

首先,在使用写入和读取功能前,我们需要导入fs模块,这是所有文件操作的基础:

const fs = require("fs");

一、文件写入

1. 异步写入

使用fs.writeFile方法异步写入文件。例如,写入一个三字经文件:

fs.writeFile("./三字经.txt", "人之初,性本善。", (err) => {
  if (err) {
    console.log("写入失败");
    return;
  }
  console.log("写入成功");
});
console.log("异步写入操作已发起");

注意console.log("异步写入操作已发起"); 会在 writeFile 回调之前执行,因为 writeFile 是异步的。

2. 同步写入

如果需要同步执行,可以使用fs.writeFileSync方法:

try {
  fs.writeFileSync("./data.txt", "text");
  console.log("同步写入成功");
} catch (err) {
  console.error("同步写入错误:", err);
}
console.log("同步写入操作已完成");

这里的console.log("同步写入操作已完成");会在writeFile回调之后执行,因为writeFileSync是同步的。

3. 异步追加写入

使用fs.appendFile方法可以异步追加内容到文件末尾:

fs.appendFile("./三字经.txt", "性相近,习相远。", (err) => {
  if (err) {
    console.log("追加失败");
    return;
  }
  console.log("追加成功");
});
4、同步追加写入

同样,fs.appendFileSync方法用于同步追加写入:

try {
  fs.appendFileSync("./data.txt", "\r\n追加text");
  console.log("同步追加成功");
} catch (err) {
  console.error("同步追加错误:", err);
}
5. 使用fs.writeFile实现追加写入

通过设置flag: 'a'选项,fs.writeFile也可以用于追加写入:

fs.writeFile("./三字经.txt", "\r\n苟不教,父之过。", { flag: 'a' }, (err) => {
  if (err) {
    console.error("追加写入失败:", err);
    return;
  }
  console.log("追加写入成功");
});
6. 流式写入

对于大文件或需要持续写入的数据,使用流(stream)是一个更好的选择。使用fs.createWriteStream创建一个写入流并写入数据:

const ws = fs.createWriteStream('./静夜思.txt');

ws.write('窗前明月光,\r\n'); 
ws.write("疑是地上霜。\r\n");
ws.write("举头望明月,\r\n"); 
ws.write("低头思故乡。\r\n"); 

// 关闭流,确保数据完全写入文件

ws.end(() => {
  console.log("流式写入完成");
});
//ws.close()

通常不需要显式调用ws.close()来关闭写入流,因为close方法不会等待数据被刷新到磁盘,可能会导致数据未完全写入文件。

可以使用ws.end(),它会在数据写入完成后自动关闭流,确保数据完全写入文件。。

二、文件读取

1、异步读取

使用fs.readFile方法可以异步读取文件内容。异步读取不会阻塞事件循环,这对于需要处理大量I/O操作的Node.js应用至关重要:

// 异步读取 radFile(这里以 "三字经.txt" 为例)
fs.readFile("./三字经.txt", (err, data) => {
  if (err) {
    console.log("读取失败");
    return;
  }
  console.log(data.toString());
});

2、同步读取

使用fs.readFileSync方法可以实现文件的同步读取。但请注意,同步读取会阻塞事件循环,直到文件读取完成。因此,在实际应用中,尤其是服务器应用中,通常不推荐使用同步读取:

// 同步读取 radFileSync(这里以 "三字经.txt" 为例)

let data = fs.readFileSync("./三字经.txt");

console.log(data.toString());

3、流式读取

流式读取更加灵活高效,它可以逐块读取文件内容,而不是一次性将整个文件加载到内存中。这对于处理大文件非常有用

使用 fs.createReadStream 方法可以创建一个可读流。

// 流式读取 createReadStream(这里以 "三字经.txt" 为例)
const rs = fs.createReadStream('./三字经.txt');

// 绑定data事件,每次读取到数据块时触发
rs.on('data', chunk => {
    console.log(chunk);
    // chunk 是一个 Buffer 对象,代表读取到的数据块
    // 处理文本文件时,可将Buffer对象转换为字符串:chunk.toString()
});

// 绑定end事件,读取完成时触发
rs.on('end', () => {
    console.log("读取完成");
});

// 绑定error事件,读取过程中发生错误时触发
rs.on('error', err => {
    console.error("读取错误:", err);
});

建议至少绑定 error 事件来避免未捕获的异常导致程序崩溃

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_53206841/article/details/145014394

Node.js的fs模块,读取写入文件-爱代码爱编程

首先在项目中使用 npm i fs -s 安装 fs 模块 js 中写下如下代码 let fs = require('fs'); // 写入文件 fs.writeFile('./index.txt','\nweb前端开发', {flag:'a+'},(err) =>{ if(err){ console.log(err)

node.js第一节:初识node.js与内置模块(fs文件系统模板、path路径模板、http模板)_nodejs 模板文件-爱代码爱编程

文章目录 学习目标1. 初识 Node.js1.1 回顾与思考1.1.1. 已经掌握了哪些技术1.1.2. 浏览器中的 JavaScript 的组成部分1.1.3. 思考:为什么 JavaScript 可以在浏

node.js 中 fs 模块文件操作的应用教程-爱代码爱编程

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它可以让 JavaScript 代码在服务器端运行。在 Node.js 中,fs 模块是用来处理文件系统操作的模块。通过 fs 模块,我

node.js-爱代码爱编程

fs模块 fs全称为file system,称之为文件系统,是Node.js中的内置模块,可以对计算机中的磁盘进行操作。 1. 文件写入 文件写入就是将数据保存到文件中,我们可以使用如下几个方法来实现该效果

node.js核心模块:文件系统(fs)模块详解_node.js fs模块-爱代码爱编程

Node.js是一个强大的JavaScript运行时环境,允许开发者在服务器端编写高性能的应用程序。在Node.js中,文件系统(fs)模块是与文件和目录交互的核心模块之一。它提供了一系列的方法来读取、写入和管理文件,允许我

【node.js】fs 模块详解_nodejs fs-爱代码爱编程

文章目录 一、fs 模块概述1. 模块介绍2. fs 模块的加载 二、文件操作1. 读取文件2. 写入文件3. 追加文件内容4. 删除文件 三、目录操作1. 创建目录2. 读取目录内容3. 删除

node.js中的fs模块-爱代码爱编程

说明 Node.js中的fs模块:封装了与本机文件系统进行交互的方法、属性。 使用fs模块的语法: 1)加载fs模块对象 2)写入文件内容 3)读取文件内容 示例 使用fs.writeFile写入文件 /

曲速引擎前端代码生成器 6.6.0 介绍二-爱代码爱编程

曲速引擎前端代码生成器 6.6.0 介绍二 曲速引擎前端代码生成器是动词算子式通用代码生成器阵列的前端生成引擎。支持 Java,Golang,Rust,Zig 数种语言,约十余个后端技术栈的前端代码生成。支持 Nodejs 21,18 和 14。现在,曲速引擎前端代码生成器已全部开源,并公布了两个介绍视频,视频请见: https://www.bilib

前端(api)学习笔记(class 4):进阶-爱代码爱编程

1、日期对象 日期对象:用来表示事件的对象 作用:可以得到当前系统时间 1、实例化 在代码中发现了new关键字,一般将这个操作称为实例化 创建一个时间对象并获取时间         获得当前时间 const date=new Date() 使用日志查看,得到的结果为:         获得指定时间 const date=new Da

前端for循环遍历——foreach、map使用-爱代码爱编程

title: 前端不同类型的for循环遍历——foreach、map date: 2025-01-04 11:02:17 tags: javascript 前端不同类型的for循环遍历 场景:很多时候后端发来的数据是

【pptist】批注、选择窗格-爱代码爱编程

前言:本篇文章研究批注和选择窗格两个小功能 一、批注 批注功能就是介个小图标 点击可以为当前页的幻灯片添加批注,还能删除之前的批注 如果我们增加了登录功能,还可以在批注上显示当前的用户名和头像,不过现在是写死的。 左

casl的rbac用户权限控制实现指南-爱代码爱编程

简介 CASL是一个强大的权限控制库,可以帮助我们实现灵活的RBAC(基于角色的访问控制)系统。本文将介绍如何使用CASL实现用户权限管理。 CASL的核心概念 1. Ability(能力) import { Abi

在线商城系统设计与开发-爱代码爱编程

亲测完美运行带论文:文末获取源码 文章目录 项目简介(论文摘要)运行视频包含的文件列表(含论文)前端运行截图后端运行截图 项目简介(论文摘要) 现代经济快节奏发展以及不断完善升级的信息化技术