Node.js 文件操作教程

ops/2025/2/25 6:38:28/

Node.js 文件操作教程

1. 文件系统模块介绍

Node.js提供了fs(File System)模块来处理文件操作。这是一个内置模块,不需要额外安装。使用前,需要先引入:

const fs = require('fs');
// 或使用 Promise API
const fsPromises = require('fs').promises;

2. 同步vs异步操作

Node.js的文件操作提供了同步和异步两种方式。异步方式是推荐的做法,因为它不会阻塞事件循环。

异步示例:

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

同步示例:

try {const data = fs.readFileSync('example.txt', 'utf8');console.log('文件内容:', data);
} catch (err) {console.error('读取文件失败:', err);
}

使用 Promise:

async function readFileContent() {try {const data = await fsPromises.readFile('example.txt', 'utf8');console.log('文件内容:', data);} catch (err) {console.error('读取文件失败:', err);}
}

3. 基本文件操作

3.1 创建和写入文件

// 写入文件(覆盖已有内容)
fs.writeFile('test.txt', '你好,Node.js!', 'utf8', (err) => {if (err) throw err;console.log('文件已被保存');
});// 追加内容到文件
fs.appendFile('test.txt', '\n新的一行内容', 'utf8', (err) => {if (err) throw err;console.log('内容已追加');
});

3.2 读取文件

// 完整读取
fs.readFile('test.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data);
});// 部分读取
const buffer = Buffer.alloc(1024);
fs.open('test.txt', 'r', (err, fd) => {if (err) throw err;fs.read(fd, buffer, 0, buffer.length, 0, (err, bytesRead, buffer) => {if (err) throw err;console.log(buffer.slice(0, bytesRead).toString());fs.close(fd, (err) => {if (err) throw err;});});
});

3.3 检查文件状态

fs.stat('test.txt', (err, stats) => {if (err) throw err;console.log('文件大小:', stats.size);console.log('是否为文件:', stats.isFile());console.log('是否为目录:', stats.isDirectory());console.log('最后修改时间:', stats.mtime);
});

4. 目录操作

4.1 创建目录

fs.mkdir('新目录', { recursive: true }, (err) => {if (err) throw err;console.log('目录创建成功');
});

4.2 读取目录内容

fs.readdir('目录路径', (err, files) => {if (err) throw err;files.forEach(file => {console.log(file);});
});

4.3 删除目录

fs.rmdir('目录路径', { recursive: true }, (err) => {if (err) throw err;console.log('目录删除成功');
});

5. 流式操作

对于大文件,使用流式操作可以提高效率并减少内存使用。

5.1 读取流

const readStream = fs.createReadStream('大文件.txt', {encoding: 'utf8',highWaterMark: 1024 // 设置缓冲区大小
});readStream.on('data', (chunk) => {console.log('接收到数据片段:', chunk);
});readStream.on('end', () => {console.log('读取完成');
});readStream.on('error', (err) => {console.error('读取错误:', err);
});

5.2 写入流

const writeStream = fs.createWriteStream('输出.txt');writeStream.write('第一行数据\n');
writeStream.write('第二行数据\n');writeStream.end('写入完成');writeStream.on('finish', () => {console.log('写入已完成');
});writeStream.on('error', (err) => {console.error('写入错误:', err);
});

5.3 管道操作

const readStream = fs.createReadStream('源文件.txt');
const writeStream = fs.createWriteStream('目标文件.txt');readStream.pipe(writeStream);

6. 实践建议

  1. 错误处理:始终做好错误处理,使用 try-catch 或回调函数处理可能的错误。

  2. 路径处理:使用 path 模块处理文件路径,避免跨平台问题:

const path = require('path');
const filePath = path.join(__dirname, 'files', 'example.txt');
  1. 异步操作:优先使用异步方法,避免阻塞事件循环。

  2. 大文件处理:处理大文件时使用流式操作,避免内存溢出。

  3. 权限检查:在进行文件操作前检查权限:

fs.access('文件路径', fs.constants.W_OK, (err) => {if (err) {console.error('没有写入权限');return;}// 继续操作
});

http://www.ppmy.cn/ops/161140.html

相关文章

最长递增子序列(贪心算法)思路+源码

文章目录 题目[](https://leetcode.cn/problems/longest-increasing-subsequence/)算法原理源码总结题目 首先,要掌握动态规划加二分查找 算法原理 1.回顾dp的解法 状态表示:dp[i]表示:以i位置的元素为结尾的所有的子序列中,最长递增子序列的长度 状态转移方程:dp[i]= m…

DeepSeek开源周高能开场:新一代高效推理引擎FlashMLA正式发布

全球AI社区沸腾!DeepSeek开源周高能开场:新一代高效推理引擎FlashMLA正式发布 北京时间今晨,国内领先的人工智能研究机构深度求索(DeepSeek)在GitHub平台重磅推出全新开源项目FlashMLA,以破竹之势在开源界…

Java IO 流:从入门到实践

目录 引言 什么是 IO 流? IO 流的分类 1. 按数据流向 2. 按数据类型 3. 按功能 常用 IO 流类 IO 流的使用 1. 字节流示例:文件复制 2. 字符流示例:文件读写 3. 缓冲流示例:高效文件读写 4. 对象序列化示例 IO 流的最佳…

STM32 HAL库UART串口数据接收实验

1. 实验目标 掌握STM32 HAL库的UART配置方法 实现通过UART接收数据并处理 使用中断方式接收数据 用串口调试工具发送数据1或0,输入为1时板载LED亮,输入为0板载LED熄灭。 2. 硬件准备 STM32开发板(STM32F103C8T6) USB转TTL模块…

深入理解Zookeeper:分布式系统的协调者

引言 在现代分布式系统中,协调和管理多个节点之间的状态和行为是一个复杂且关键的任务。Zookeeper作为一个分布式协调服务,为开发者提供了一种高效、可靠的方式来处理分布式系统中的一致性问题。本文将介绍Zookeeper的基本概念、使用场景以及如何通过示…

前沿科技一览未来发展趋势

新能源在分布式能源系统中的应用越来越广泛。这不仅提高了能源使用效率,还促进了环境。下面就来谈谈这个话题。 首先,新能源比如太阳能和风能,在分布式能源系统中可以有效减少对传统能源的依赖。例如,家庭安装太阳能板就可以自己…

复刻Dummy机械臂保姆教程

一直想复刻稚晖君的Dummy机械臂,24年11月底终于开始行动,上网学习、材料准备、组装调试前后耗时1个多月,终于在春节前顺利完工,正好用它给大家拜个年。很多同学在咨询细节,这里就整理一份保姆式教程,其中学…

高清下载油管视频到本地

下载工具并安装: yt-dlp官网地址: GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址: Download FFmpeg 注:记住为其添加环境变量 操作命令: 该指令表示以720p码率下载VIDEO_UR…