首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Node.js 文件系统操作指南

  • 25-02-18 14:01
  • 3886
  • 9367
blog.csdn.net

文章目录

  • Node.js 文件系统操作完全指南
    • 一、引言
    • 二、基本文件操作
      • 2.1 读取文件
      • 2.2 写入文件
      • 2.3 追加内容到文件
    • 三、文件与目录的创建与删除
      • 3.1 创建文件
      • 3.2 创建目录
      • 3.3 删除文件
      • 3.4 删除目录
    • 四、文件与目录的信息查询
      • 4.1 检查文件或目录是否存在
      • 4.2 获取文件信息
      • 4.3 获取目录内容
      • 五、流式文件操作
      • 5.2 可写流
    • 六、文件路径操作
      • 6.1 路径规范化
      • 6.2 路径拼接
    • 七、文件系统的异步与同步操作

Node.js 文件系统操作完全指南

摘要:本文将深入探讨 Node.js 中的文件系统(fs)模块,它是 Node.js 中进行文件读写的核心模块。通过详细解释各种文件操作方法,本文将帮助您更好地理解和应用 Node.js 进行文件系统的操作。

一、引言

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用于方便地搭建响应速度快、易于扩展的网络应用。在 Node.js 中,几乎所有与文件的交互都是通过 fs(文件系统)模块来完成的。fs 模块提供了大量的 API,用于对系统文件及目录进行一系列的创建、读取、写入、删除、查询等操作。

二、基本文件操作

2.1 读取文件

Node.js 提供了多种读取文件的方法,其中最常用的是 fs.readFile。这个方法异步地读取文件的全部内容,并在读取完成后通过回调函数返回文件内容。

const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

上述代码中,readFile 方法的第一个参数是文件路径,第二个参数是文件编码(默认为 null),第三个参数是读取完成后的回调函数。如果在读取文件过程中出现错误,err 对象将包含错误信息;否则,err 为 null,data 参数将包含文件的内容。

2.2 写入文件

写入文件可以使用 fs.writeFile 方法。这个方法异步地将数据写入文件,如果文件已存在,则替换该文件。如果文件不存在,则创建该文件。

const fs = require('fs');

fs.writeFile('example.txt', 'Hello, World!', 'utf8', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在上述代码中,writeFile 方法的第一个参数是文件路径,第二个参数是要写入的数据,第三个参数是文件编码(默认为 utf8),第四个参数是写入完成后的回调函数。

2.3 追加内容到文件

如果您想向现有文件追加内容,而不是覆盖它,可以使用 fs.appendFile 方法。

const fs = require('fs');

fs.appendFile('example.txt', 'New content!', 'utf8', (err) => {
  if (err) throw err;
  console.log('The "New content!" was appended to file!');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

三、文件与目录的创建与删除

3.1 创建文件

在 Node.js 中,您可以通过写入文件来创建文件。如果指定的文件不存在,fs.writeFile 和 fs.appendFile 方法都会创建新文件。

3.2 创建目录

要创建新目录,可以使用 fs.mkdir 方法。

const fs = require('fs');

fs.mkdir('new_directory', { recursive: true }, (err) => {
  if (err) throw err;
  console.log('Directory created!');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在上述代码中,mkdir 方法的第一个参数是要创建的目录路径,第二个参数是一个选项对象,其中 recursive 属性设置为 true 允许在需要时创建中间目录,第三个参数是创建完成后的回调函数。

3.3 删除文件

要删除文件,可以使用 fs.unlink 方法。

const fs = require('fs');

fs.unlink('example.txt', (err) => {
  if (err) throw err;
  console.log('File deleted!');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.4 删除目录

要删除目录,可以使用 fs.rmdir 方法。需要注意的是,rmdir 只能删除空目录。

const fs = require('fs');

fs.rmdir('empty_directory', (err) => {
  if (err) throw err;
  console.log('Directory deleted!');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果您需要删除非空目录及其所有内容,可以使用 fs.rm 方法,并将 recursive 选项设置为 true。

const fs = require('fs');

fs.rm('non_empty_directory', { recursive: true, force: true }, (err) => {
  if (err) throw err;
  console.log('Directory and its content deleted!');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

四、文件与目录的信息查询

4.1 检查文件或目录是否存在

要检查文件或目录是否存在,可以使用 fs.exists 方法,但更推荐使用 fs.access,因为它提供了更好的错误处理。

const fs = require('fs');

fs.access('example.txt', fs.constants.F_OK, (err) => {
  if (err) {
    console.log('File does not exist!');
  } else {
    console.log('File exists!');
  }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4.2 获取文件信息

要获取文件的信息(如文件大小、创建时间等),可以使用 fs.stat 或 fs.statSync 方法。

const fs = require('fs');

fs.stat('example.txt', (err, stats) => {
  if (err) throw err;
  console.log(`File size: ${stats.size} bytes`);
  console.log(`Creation time: ${stats.ctime}`);
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.3 获取目录内容

要读取目录的内容,可以使用 fs.readdir 方法。

const fs = require('fs');

fs.readdir('directory_path', (err, files) => {
  if (err) throw err;
  console.log(files);
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

五、流式文件操作

对于大文件或需要逐步处理的文件,使用流式操作更加高效。Node.js 提供了四种流:可读流(Readable)、可写流(Writable)、双向流(Duplex)和转换流(Transform)。

5.1 可读流

可读流用于从数据源(如文件)读取数据。

const fs = require('fs');

const readableStream = fs.createReadStream('large_file.txt');

readableStream.on('data', (chunk) => {
  console.log(`Received ${chunk.length} bytes of data.`);
});

readableStream.on('end', () => {
  console.log('No more data.');
});

readableStream.on('error', (err) => {
  console.error(`Error occurred: ${err}`);
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5.2 可写流

可写流用于将数据写入目标(如文件)。

const fs = require('fs');

const writableStream = fs.createWriteStream('output.txt');

writableStream.write('Hello, ');
writableStream.write('World!');

writableStream.end();

writableStream.on('finish', () => {
  console.log('All data has been flushed to the file system.');
});

writableStream.on('error', (err) => {
  console.error(`Error occurred: ${err}`);
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

六、文件路径操作

Node.js 的 path 模块提供了许多实用方法来处理文件和目录的路径。

6.1 路径规范化

使用 path.normalize 方法可以将路径字符串转换为规范化路径。

const path = require('path');

console.log(path.normalize('/foo/bar//baz/asdf/../../'));
// 输出: '/foo/bar/baz'
  • 1
  • 2
  • 3
  • 4

6.2 路径拼接

使用 path.join 方法可以将多个路径片段拼接成一个路径字符串。

const path = require('path');

console.log(path.join(__dirname, 'foo', 'bar', 'baz', 'qux.txt'));
// 输出类似于: '/Users/example/foo/bar/baz/qux.txt'
  • 1
  • 2
  • 3
  • 4

七、文件系统的异步与同步操作

Node.js 的 fs 模块提供了大多数文件操作的异步和同步版本。异步方法通常在方法名的末尾包含 “Sync”,如 fs.readFileSync 和 fs.writeFileSync。

异步方法不会阻塞 Node.js 事件循环,这使得应用程序可以同时处理多个操作。而同步方法会阻塞事件循环,直到操作完成。

通常,推荐使用异步方法,因为它们提供了更好的性能和更高的吞吐量。然而,在某些情况下,如初始化脚本或命令行工具,使用同步方法可能更方便。

注:本文转载自blog.csdn.net的极客岛的文章"https://whr2349.blog.csdn.net/article/details/135975441"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top