Node.js中常用文件系统操作的示例详解

 更新时间:2024年02月02日 14:44:54   作者:球球不吃虾  
这篇文章将深入探讨?Node.js?中的文件系统(fs)模块,它是?Node.js?中进行文件读写的核心模块,感兴趣的小伙伴可以跟随小编一起学习一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

摘要:本文将深入探讨 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);
});

上述代码中,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!');
});

在上述代码中,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!');
});

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

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!');
});

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

3.3 删除文件

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

const fs = require('fs');

fs.unlink('example.txt', (err) => {
  if (err) throw err;
  console.log('File deleted!');
});

3.4 删除目录

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

const fs = require('fs');

fs.rmdir('empty_directory', (err) => {
  if (err) throw err;
  console.log('Directory deleted!');
});

如果您需要删除非空目录及其所有内容,可以使用 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!');
});

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

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!');
  }
});

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}`);
});

4.3 获取目录内容

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

const fs = require('fs');

fs.readdir('directory_path', (err, files) => {
  if (err) throw err;
  console.log(files);
});

五、流式文件操作

对于大文件或需要逐步处理的文件,使用流式操作更加高效。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}`);
});

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}`);
});

六、文件路径操作

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

6.1 路径规范化

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

const path = require('path');

console.log(path.normalize('/foo/bar//baz/asdf/../../'));
// 输出: '/foo/bar/baz'

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'

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

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

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

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

以上就是Node.js中常用文件系统操作的示例详解的详细内容,更多关于Node.js文件操作的资料请关注程序员之家其它相关文章!

相关文章

  • Node.js中路径处理模块path详解

    Node.js中路径处理模块path详解

    相信大家都知道在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。因为部分文档说的不够清晰,还有部分因为接口的平台差异性。本文就给大家详细介绍下关于Node.js中的路径处理模块path,希望能对大家学习或者使用模块path有所帮助,下面来一起看看吧。
    2016-11-11
  • typescript nodejs 依赖注入实现方法代码详解

    typescript nodejs 依赖注入实现方法代码详解

    今天分享的是用typescript语言实现的ioc模式,这边用到的主要组件是 reflect-metadata 这个组件可以获取或者设置元数据信息,接下来通过本文给大家介绍typescript nodejs 依赖注入实现方法,需要的朋友可以参考下
    2019-07-07
  • 浅谈Node 调试工具入门教程

    浅谈Node 调试工具入门教程

    这篇文章主要介绍了浅谈Node 调试工具入门教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Nodejs中解决cluster模块的多进程如何共享数据问题

    Nodejs中解决cluster模块的多进程如何共享数据问题

    本篇文章主要介绍了Nodejs中解决cluster模块的多进程如何共享数据问题,有需要的可以了解一下。
    2016-11-11
  • NestJS核心概念之Middleware中间件创建使用示例

    NestJS核心概念之Middleware中间件创建使用示例

    这篇文章主要为大家介绍了NestJS核心概念之Middleware中间件创建使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 前端Electron新手入门教程详解

    前端Electron新手入门教程详解

    这篇文章主要介绍了Electron新手入门教程详解,首先围绕Electron框架的关键知识点进行详细讲解,然后对DEMO程序进行分析,让前端开发人员对使用Electron开发桌面应用程序有一个初步的了解。,需要的朋友可以参考下
    2019-06-06
  • nodejs使用readline逐行读取和写入文件的实现

    nodejs使用readline逐行读取和写入文件的实现

    这篇文章给大家介绍了nodejs使用readline逐行读取和写入文件的实现方法,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • 深入理解Node.js 事件循环和回调函数

    深入理解Node.js 事件循环和回调函数

    这篇文章主要介绍了深入理解Node.js 事件循环和回调函数,详细的介绍Node.js 事件循环和Node.js回调函数,需要学习的可以参考一下。
    2016-11-11
  • Nodejs极简入门教程(二):定时器

    Nodejs极简入门教程(二):定时器

    这篇文章主要介绍了Nodejs极简入门教程(二):定时器,本文讲解了setTimeout、setInterval、setImmediate及process.nextTick等内容,需要的朋友可以参考下
    2014-10-10
  • npm淘宝镜像过期解决办法

    npm淘宝镜像过期解决办法

    npm?官方镜像在国内访问很慢,很多同学都会选择切换到国内的一些 npm 镜像,本文主要介绍了npm淘宝镜像过期解决办法,感兴趣的可以了解一下
    2024-02-02

最新评论

?


http://www.vxiaotou.com