【Node.js入门笔记3---fs 文件系统模块】

embedded/2025/3/13 12:30:32/

Node.js入门笔记3

  • Node.js---fs 文件系统模块
  • 一、文件基础操作
    • 0.学习fs的前提
    • 1.fs.readFile():用来读取指定文件中的内容。
      • 读取txt文件里面的内容:
      • 读取XLSX文件里面的内容:
    • 2. fs.writeFile():用来向指定的文件中写入内容(会覆盖原有内容)
    • 3.fs.appendFile():追加内容到文件末尾。
  • 特别注意:第123点都是异步方法(非阻塞),需要用到回调函数
    • 4. fs.readFileSync() 读取文件内容。
    • 5. fs.writeFileSync() 写入文件内容。覆盖原来的内容
    • 6. 文件打开与关闭
    • 7. 文件删除与重命名

Node.js—fs 文件系统模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。**它提供了一系列的方法和属性,用来满足用户对文件的操作需求。**学习 Node.js 的 fs(文件系统)模块时,可以按照以下内容逐步深入,涵盖基础操作、高级功能及实际应用场景。

一、文件基础操作

0.学习fs的前提

如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:

const fs = require('node:fs');

1.fs.readFile():用来读取指定文件中的内容。

语法格式:

fs.readFile(path,[options] ,callback)

参数解读:
参数1:必选参数,字符串,表示文件的路径。
参数2:可选参数,表示以什么编码格式来读取文件。
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。

读取txt文件里面的内容:


// 1.导入 fs 模块
const fs = require("node:fs");// 2.调用 fs.readFile()方法读取文件
// 参数1:读取文件的存放路径
// 参数2:读取文件时候采用的编码格式,一般默认指定 utf8,处理文本(utf8)和二进制(Buffer)数据。
// 参数3:回调函数,拿到读取失败和成功的结果 err data
fs.readFile('C:\\Users\\Administrator\\Desktop\\HK.txt','utf8',function (err, data) {// 可以判断 err 对象是否为 nul,从而知晓文件读取的结果if (err) {console.error('读取文件时出现错误:', err);return;}console.log(data);
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\readFile.js

如图:node截图

读取XLSX文件里面的内容:

在写代码前,需要先安装xlsx依赖:

npm install xlsx

如图则安装成功:
node截图
依赖安装成功后,可以写代码了:

// 1.导入 fs 模块和 XLSX 模块
const fs = require("node:fs");
const XLSX = require("xlsx");// 2.读取 Excel 文件
fs.readFile('C:\\Users\\Administrator\\Desktop\\test.XLSX', function (err, data) {if (err) {console.error('读取文件时出现错误:', err);return;}// 正确解析 Excel 数据,并解析为 JSON 格式const workbook = XLSX.read(data, { type: "buffer" });  // 以 buffer 格式读取文件const sheetName = workbook.SheetNames[0];  // 获取 Excel 中第一个工作表的名称const worksheet = workbook.Sheets[sheetName];  // 获取该工作表的数据const jsonData = XLSX.utils.sheet_to_json(worksheet);  // 将 Excel 数据解析为 JSON 格式console.log(jsonData); // 打印解析后的 JSON 数据
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\readFile.js

结果如图:node截图

2. fs.writeFile():用来向指定的文件中写入内容(会覆盖原有内容)

语法格式

fs.writeFile(file, data,[options], callback)

参数解读:
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2:必选参数,表示要写入的内容。
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。处理文本(utf8)和二进制(Buffer)数据。
参数4:必选参数,文件写入完成后的回调函数。

在指定的文件中写入东西:

// 1.导入fs模块
const fs = require('fs');// 2.调用fs.writeFile()方法写入文件
// 参数1:表示文件的存放路径/1
// 参数2:表示要写入的内容
// 参数3:表示编码格式
// 参数4:回调函数
fs.writeFile('C:\\Users\\Administrator\\Desktop\\HK.txt','文件成功写入','utf8',function(err){if(err){console.log(err);}console.log("文件写入成功");});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\writeFile.js

3.fs.appendFile():追加内容到文件末尾。

语法格式:

fs.appendFile(file, data[, options], callback)

参数解读:
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2:必选参数,表示要写入的内容。
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。处理文本(utf8)和二进制(Buffer)数据。
参数4:必选参数,文件写入完成后的回调函数。

// 1.导入fs模块
const fs = require('fs');// 2.调用fs.appendFile()方法,追加内容到文件末尾
// 参数1:文件路径
// 参数2:要追加的内容
// 参数3:回调函数,回调函数只有一个参数,参数为错误信息
// 如果文件不存在,会自动创建文件,如果文件存在,会在文件末尾追加内容
fs.appendFile('C:\\Users\\Administrator\\Desktop\\HK.txt', 'Hello content!', function (err) {// 如果有错误,抛出错误if (err) throw err;console.log('Saved!');
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\appendFile.js

特别注意:第123点都是异步方法(非阻塞),需要用到回调函数

4. fs.readFileSync() 读取文件内容。

语法格式:

fs.readFileSync(path[, options])

参数解读:
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2:必选参数,表示编码格式。处理文本(utf8)和二进制(Buffer)数据。

写法一

// 1.导入fs模块
const fs = require('fs');
// 读取文件内容
const input = fs.readFileSync('C:\\Users\\Administrator\\Desktop\\HK.txt', 'utf8');
// 打印文件内容
console.log(input);

写法二
同步进行的就不能用回调函数观察数据是否成功,所有用try catch来捕获问题

const fs = require('fs');
try {const data = fs.readFileSync('C:\\Users\\Administrator\\Desktop\\HK.txt', 'utf8');console.log(data);
} catch (err) {console.error('读取文件时出现错误:', err);
}

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\readFileSync.js

5. fs.writeFileSync() 写入文件内容。覆盖原来的内容

语法格式:

fs.writeFileSync(path, data[, options])
const fs = require('fs');// 写入文件,覆盖原来的内容
try {fs.writeFileSync('C:\\Users\\Administrator\\Desktop\\HK.txt', 'Hello, World!');
} catch (err) {console.error('写入文件时出现错误:', err);
}

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\writeFileSync.js

6. 文件打开与关闭

1.fs.open():手动打开文件获取文件描述符。
语法格式:

fs.open(path, flags[, mode], callback)

参数解释:
path:文件路径。

flags:打开模式(如 ‘r’ 读取,‘w’ 写入,‘a’ 追加)。
‘r’:以只读模式打开文件。如果文件不存在,会抛出错误。
‘r+’:以读写模式打开文件。如果文件不存在,会抛出错误。
‘w’:以写入模式打开文件。如果文件不存在,则创建该文件;如果文件已存在,则截断文件内容(清空文件)。
‘w+’:以读写模式打开文件。如果文件不存在,则创建该文件;如果文件已存在,则截断文件内容。
‘a’:以追加模式打开文件。如果文件不存在,则创建该文件。
‘a+’:以读取和追加模式打开文件。如果文件不存在,则创建该文件。
mode:文件权限(默认0o666表示所有用户都有读写权限。该参数仅在创建新文件时有效。

callback:回调函数,返回错误和文件描述符fd。
err:如果打开文件过程中出现错误,该参数会包含错误信息;如果操作成功,该参数为 null。
fd:如果操作成功,该参数是一个整数,表示文件描述符,后续可以使用该文件描述符进行其他文件操作。
2.fs.close():关闭文件描述符。
语法格式:

fs.close(fd, callback)

参数解释:
fd:在使用 fs.open() 等方法成功打开一个文件时,会返回一个整数作为文件描述符,这个文件描述符就像文件的一个 “身份证号码”,后续对该文件进行的读写、关闭等操作都要通过这个文件描述符来指定具体操作的是哪个文件。

err:如果在关闭文件的过程中出现错误,err 会包含错误信息,它是一个 Error 对象;如果关闭操作成功,err 的值为 null。

// 导入文件系统模块
const fs = require('fs');// 以只读模式打开文件// 打开文件
// 参数1: 文件名
// 参数2: 文件打开方式
// 参数3: 回调函数
// 回调函数的参数: err: 错误信息 fd: 文件描述符
fs.open('C:\Users\Administrator\Desktop\HK.txt', 'r', (err, fd) => {if (err) {console.error('打开文件时出现错误:', err);return;}console.log('文件打开成功,文件描述符:', fd);// 后续可以使用 fd 进行读取操作fs.close(fd, (closeErr) => {if (closeErr) {console.error('关闭文件时出现错误:', closeErr);} else {console.log('文件已关闭');}});
});

// 以写入模式打开文件
const fs = require(‘fs’);

fs.open('newfile.txt', 'w', (err, fd) => {if (err) {console.error('打开文件时出现错误:', err);return;}console.log('文件打开成功,文件描述符:', fd);// 后续可以使用 fd 进行写入操作fs.close(fd, (closeErr) => {if (closeErr) {console.error('关闭文件时出现错误:', closeErr);} else {console.log('文件已关闭');}});
});

在获取文件描述符后,可以结合 fs.read()、fs.write() 等方法进行文件的读写操作。例如,使用 fs.write() 向文件中写入数据:

// 结合其他文件操作方法
const fs = require('fs');fs.open('output.txt', 'w', (err, fd) => {if (err) {console.error('打开文件时出现错误:', err);return;}const data = Buffer.from('Hello, World!');fs.write(fd, data, 0, data.length, null, (writeErr, written, buffer) => {if (writeErr) {console.error('写入文件时出现错误:', writeErr);} else {console.log('写入成功,写入字节数:', written);}fs.close(fd, (closeErr) => {if (closeErr) {console.error('关闭文件时出现错误:', closeErr);} else {console.log('文件已关闭');}});});
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\open.js

7. 文件删除与重命名

1. fs.unlink():删除文件。
确保当前 Node.js 进程有足够的权限来删除指定的文件。如果权限不足,会抛出错误。如果要删除的文件不存在,也会抛出错误。在删除文件前,可以先检查文件是否存在,或者在回调函数中妥善处理文件不存在的错误。
语法格式

fs.unlink(path, callback)

参数解释:
path:必需参数,类型可以是字符串、Buffer 或者 URL,代表要删除的文件的路径。
callback:必需参数,是一个回调函数,用于处理删除操作完成后的结果。该回调函数接受一个参数 err,如果删除过程中出现错误,err 会包含错误信息(是一个 Error 对象);若删除成功,err 的值为 null。

const fs = require('fs');// 要删除的文件路径
const filePath = 'C:\\Users\\Administrator\\Desktop\\hk.txt';fs.unlink(filePath, (err) => {if (err) {console.error('删除文件时出现错误:', err);return;}console.log('文件删除成功');
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\unlink.js

特别注意:这里删除的文件在电脑的回收站找不到,所以不能复原了

2.fs.rename():重命名或移动文件。

fs.rename(oldPath, newPath, callback)

参数解释:
oldPath:必需参数,类型可以是字符串、Buffer 或者 URL,表示文件的当前路径。
newPath:必需参数,同样可以是字符串、Buffer 或者 URL,代表文件的新路径。如果新路径和原路径在同一目录下,就是重命名操作;如果新路径指向不同的目录,就是移动操作。
callback:必需参数,是一个回调函数,用于处理重命名或移动操作完成后的结果。回调函数接受一个参数 err,若操作过程中出现错误,err 会包含错误信息;若操作成功,err 的值为 null。

const fs = require('fs');// 原文件路径
const oldFilePath = 'C:\\Users\\Administrator\\Desktop\\HK.txt';
// 新文件路径
const newFilePath = 'C:\\Users\\Administrator\\Desktop\\newName.txt';fs.rename(oldFilePath, newFilePath, (err) => {if (err) {console.error('重命名文件时出现错误:', err);return;}console.log('文件重命名成功');
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\rename.js

http://www.ppmy.cn/embedded/172239.html

相关文章

Percona XtraBackup8.0备份实例

Percona XtraBackup8.0备份实例 ​ 此示例演示了初级 DBA 如何使用 Percona XtraBackup 8.0 和 Percona Server for MySQL 8.0 数据库服务器为大型组织设置每日完整备份和每小时增量备份。 一、实验环境 您的系统上安装了 Percona XtraBackup 8.0。您有一个正在运行的 Perco…

FPGA 定点小数计算

1. 使用FPGA实现定点小数计算 FPGA中不适合做浮点数运算,但有时又会涉及到小数的运算,这时就需要用到Q格式数据。 2. Q格式 Q:如果想要表示一个小数,但FPGA里没法加小数点,那该如何表示小数呢? A:可以使用定点小数! 定点小数的小…

Ubuntu 系统上安装 NVIDIA CUDA 的详细步骤

以下是在 Ubuntu 系统上安装 NVIDIA CUDA 的详细步骤,分为 驱动安装 和 CUDA Toolkit 安装 两个部分: 一、准备工作 确认GPU型号支持CUDA 运行以下命令查看NVIDIA GPU型号:GeForce RTX 2080 Ti root@i-28e6iose:/home/ubuntu# lspci | grep -i nvidia 00:0c.0 VGA compatibl…

java核心内容笔记

Java 核心内容学习笔记 一、Java 环境配置 1. JDK 安装 下载地址:Oracle 官方网站安装步骤: 根据操作系统选择对应的安装包运行安装程序,选择安装路径配置环境变量 JAVA_HOME:指向JDK安装目录PATH:添加 %JAVA_HOME%…

【密码学——基础理论与应用】李子臣编著 第三章 分组密码 课后习题

免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正! 不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维! 题目 逐题解析 3.9 做这题需要有置换和错排的知识储备…

计算机网络:Socket编程 Tcp协议 第二弹

目录 1. Tcp协议接口 1.1 listen监听函数 1.2 accept函数 1.3 connect函数 1.4 inet_ntop函数 2. TcpEchoServer服务 2.1 Common.hpp 2.1 TcpServer.hpp 2.1.1 TcpServer类 2.1.2 InitServer函数 2.1.3 Start函数 2.1.4 HandlerRequest函数 2.3 TcpServer.cc 2.4…

10✨让笔迹突破语言壁垒!Manus AI 多语言识别开启智能书写新纪元

Manus AI在多语言手写识别领域的技术突破主要体现在以下四个方面,通过创新的技术架构和工程化实践解决了传统手写识别的核心痛点: 一、深度学习模型与算法优化 混合神经网络架构 Manus AI采用了**卷积神经网络(CNN)与长短…

【web前端开发】HTML排版标签、HTML语义化标签、常用的文本标签

1、HTML排版标签 标签名 标签含义 单/双标签 h1~h6 …