返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何在Nodejs中使用模块fs文件系统
  • 780
分享到

如何在Nodejs中使用模块fs文件系统

2024-04-02 19:04:59 780人浏览 安东尼
摘要

目录概述文件描述符同步、异步与Promise同步写法异步写法(推荐)Promise写法目录与目录项文件信息ReadStream与WriteStream概述 node 的fs文档密密麻

概述

node 的fs文档密密麻麻的 api 非常多,毕竟全面支持对文件系统的操作。文档组织的很好,操作基本分为文件操作、目录操作、文件信息、流这个大方面,编程方式也支持同步、异步和 Promise。

本文记录了几个文档中没详细描写的问题,可以更好地串联fs文档思路:

  • 文件描述符
  • 同步、异步与 Promise
  • 目录与目录项
  • 文件信息
  • stream

文件描述符

文件描述符是一个非负整数。它是一个索引值,操作系统可以根据它来找到对应的文件。

在 fs 的很多底层 api 中,需要用到文件描述符。在文档中,描述符通常用fd来代表。例如:fs.read(fd, buffer, offset, length, position, callback)。与这个 api 相对应的是:fs.readFile(path[, options], callback)。

因为操作系统对文件描述符的数量有限制,因此在结束文件操作后,别忘记 close:


const fs = require("fs");

fs.open("./db.JSON", "r", (err, fd) => {
    if (err) throw err;
    // 文件操作...
    // 完成操作后,关闭文件
    fs.close(fd, err => {
        if (err) throw err;
    });
});

同步、异步与 Promise

所有文件系统的 api 都有同步和异步两种形式。

同步写法

不推荐使用同步 api,会阻塞线程


try {
    const buf = fs.readFileSync("./package.json");
    console.log(buf.toString("utf8"));
} catch (error) {
    console.log(error.message);
}

异步写法

异步写法写起来容易进入回调地狱。


fs.readFile("./package.json", (err, data) => {
    if (err) throw err;
    console.log(data.toString("utf8"));
});

(推荐)Promise 写法

在 node v12 之前,需要自己借助 promise 封装:


function readFilePromise(path, encoding = "utf8") {
    const promise = new Promise((resolve, reject) => {
        fs.readFile(path, (err, data) => {
            if (err) return reject(err);
            return resolve(data.toString(encoding));
        });
    });
    return promise;
}

readFilePromise("./package.json").then(res => console.log(res));

在 node v12 中,引入了 fs Promise api。它们返回 Promise 对象而不是使用回调。 API 可通过require('fs').promises访问。如此一来,开发成本更低了。


const fsPromises = require("fs").promises;

fsPromises
    .readFile("./package.json", {
        encoding: "utf8",
        flag: "r"
    })
    .then(console.log)
    .catch(console.error);

目录与目录项

fs.Dir 类:封装了和文件目录相关的操作

fs.Dirent 类:封装了目录项的相关操作。例如判断设备类型(字符、块、FIFO 等)。

它们之间的关系,通过代码展示:


const fsPromises = require("fs").promises;

async function main() {
    const dir = await fsPromises.opendir(".");
    let dirent = null;
    while ((dirent = await dir.read()) !== null) {
        console.log(dirent.name);
    }
}

main();

文件信息

fs.Stats 类:封装了文件信息相关的操作。它在fs.stat()的回调函数中返回。


fs.stat("./package.json", (err, stats) => {
    if (err) throw err;
    console.log(stats);
});

注意,关于检查文件是否存在:

  • 不建议在调用 fs.open()、 fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查文件是否存在。而是应该直接打开、读取或写入文件,如果文件不可用则处理引发的错误。
  • 要检查文件是否存在但随后并不对其进行操作,则建议使用 fs.access()

ReadStream 与 WriteStream

nodejs 中,stream 是个非常重要的库。很多库的 api 都是基于 stream 来封装的。例如下面要说的 fs 中的 ReadStream 和 WriteStream。

fs 本身提供了 readFile 和 writeFile,它们好用的代价就是性能有问题,会将内容一次全部载入内存。但是对于几 GB 的大文件,显然会有问题。

那么针对大文件的解决方案自然是:一点点读出来。这就需要用到 stream 了。以 readStream 为例,代码如下:


const rs = fs.createReadStream("./package.json");
let content = "";

rs.on("open", () => {
    console.log("start to read");
});

rs.on("data", chunk => {
    content += chunk.toString("utf8");
});

rs.on("close", () => {
    console.log("finish read, content is:\n", content);
});

借助 stream 的 pipe,一行快速封装一个大文件的拷贝函数:


function copyBigFile(src, target) {
    fs.createReadStream(src).pipe(fs.createWriteStream(target));
}

以上就是如何在Nodejs中使用模块fs文件系统的详细内容,更多关于Nodejs的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何在Nodejs中使用模块fs文件系统

本文链接: https://lsjlt.com/news/125116.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在Nodejs中使用模块fs文件系统
    目录概述文件描述符同步、异步与Promise同步写法异步写法(推荐)Promise写法目录与目录项文件信息ReadStream与WriteStream概述 node 的fs文档密密麻...
    99+
    2024-04-02
  • Nodejs常用文件fs模块API有哪些
    这篇文章主要介绍Nodejs常用文件fs模块API有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!同步与异步fs模块的文件操作一般支持同步和异步两种API,异步又包括了回调函数和...
    99+
    2024-04-02
  • Nodejs中的模块系统该如何使用
    本篇文章给大家分享的是有关Nodejs中的模块系统该如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。模块化的背景早期 JavaScrip...
    99+
    2024-04-02
  • Node.js中fs模块如何使用
    这篇文章主要介绍“Node.js中fs模块如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node.js中fs模块如何使用”文章能帮助大家解决问题。引入fs模块var fs=requ...
    99+
    2023-07-02
  • nodejs中的读取文件fs模块示例详解
    目录什么是 nodejs?global 模块-全局变量fs模块读取文件写文件追加文件文件同步与异步的说明总结:什么是 nodejs? Node.js 是一个基于 Chrome V8...
    99+
    2022-12-19
    nodejs 读取文件fs模块 nodejs读取fs
  • node中fs模块如何检测文件是否存在
    这篇文章主要介绍node中fs模块如何检测文件是否存在,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!检测方法:1、使用“const fs = require("fs&quo...
    99+
    2024-04-02
  • nodeJs中文件系统fs与流stream有什么用
    小编给大家分享一下nodeJs中文件系统fs与流stream有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!文件系统fs主...
    99+
    2024-04-02
  • node.js-fs文件系统模块这是你知道吗
    目录1、什么是fs文件系统模块2、读取指定文件的内容1、fs.readFile()的语法格式2、fs.readFile()读取文件内容3、判断文件是否读取成功3、向指定文件写入内容1...
    99+
    2024-04-02
  • Node.js 中如何使用fs与Path模块
    Node.js 中如何使用fs与Path模块,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。概述:文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。可以...
    99+
    2023-06-20
  • Node中的fs文件模块和path路径模块怎么使用
    这篇“Node中的fs文件模块和path路径模块怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node中的fs文件模...
    99+
    2023-07-04
  • Python文件系统模块pathlib库如何使用
    本文小编为大家详细介绍“Python文件系统模块pathlib库如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python文件系统模块pathlib库如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-06
  • Nodejs读取文件时相对路径的正确写法(使用fs模块)
    在开发Nodejs中,我们往往最常用的模块就是fs核心模块(fs.readFile)来读取文件。代码如下: 但是运行之后,并没有按照想象中一样,读取test.html文件内容,这是一个bug,坑爹的玩意,...
    99+
    2022-06-04
    写法 路径 模块
  • Nodejs中如何使用crypto模块
    本篇文章给大家分享的是有关Nodejs中如何使用crypto模块,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。crypto模块是nodejs的...
    99+
    2024-04-02
  • nodejs文件操作模块FS(File System)常用函数简明总结
    件系统操作相关的函数挺多的。首先可以分为两大类。 一类是异步+回调的。 一类是同步的。 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称和形式...
    99+
    2022-06-04
    简明 函数 模块
  • 如何使用Nodejs-cluster模块
    这篇文章主要为大家展示了“如何使用Nodejs-cluster模块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Nodejs-cluster模块”这篇文章吧。基本用法Node.js默认单...
    99+
    2023-06-22
  • Node.js怎么使用文件系统模块
    这篇文章主要介绍“Node.js怎么使用文件系统模块”,在日常操作中,相信很多人在Node.js怎么使用文件系统模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.j...
    99+
    2024-04-02
  • 如何在python中使用zipfile模块操作文件
    这篇文章将为大家详细讲解有关如何在python中使用zipfile模块操作文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesut...
    99+
    2023-06-14
  • Python文件系统模块pathlib库怎么使用
    一、pathlib库官方定义pathlib 是Python内置库,Python 文档给它的定义是 Object-oriented filesystem paths(面向对象的文件系统路径)。pathlib 提供表示文件系统路径的类,其语义适...
    99+
    2023-05-14
    Python pathlib
  • kernel模块怎么在Linux系统中使用
    今天就跟大家聊聊有关kernel模块怎么在Linux系统中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. Linux内核设计:单内核、模块化(动态装载和卸载)(1) Linu...
    99+
    2023-06-12
  • Nodejs中如何使用path路径处理模块
    这篇文章将为大家详细讲解有关Nodejs中如何使用path路径处理模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取路径/文件名/扩展名获取路径:pat...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作