浅析node中的常用模块:path模块和fs模块

node中还有很多内置对象,可以帮助我们进行很多操作,包括对路径、文件等操作。下面本篇文章给大家介绍一下node常用内置模块中的path模块fs模块,希望对大家有所帮助!

浅析node中的常用模块:path模块和fs模块

path模块

path模块用于对路径和文件进行处理,提供了很多方法。

path.resolve

有一个需求是将路径和文件名进行拼接。

const basePath = '/user/why'const filename = 'abc.txt'

登录后复制

那么有人会使用字符串拼接的方式进行拼接。

const filePath = basePath + '/' + filenameconsole.log(filePath);

登录后复制

这样的结果虽然没有问题,但是考虑到不同的系统,windows系统可以使用或者\或者/作为路径分隔符,而Mac OS、Linux的Unix操作系统使用/作为路径分隔符。

1.png

解决上述问题,我们可以使用path.resolve来进行路径的拼接。

const path = require('path')const basePath = '/user/why'const filename = 'abc.txt'const filePath = path.resolve(basePath, filename)console.log(filePath);

登录后复制

2.png

从路径中获取信息

dirname:获取文件的父文件夹basename:获取文件名extname:获取文件扩展名

const path = require('path')const filePath = '/User/haha/abc.txt'console.log(path.dirname(filePath));console.log(path.basename(filePath));console.log(path.extname(filePath));

登录后复制

3.png

路径拼接

如果我们想要把多个路径进行拼接,但是不同的操作系统可能使用不同的分隔符,我们可以使用path.join函数。

const path = require('path')const basepath = '/User/haha'const filename = 'abc.txt'const filePath = path.join(basepath, filename)console.log(filePath);

登录后复制

4.png

将文件和某个文件夹拼接

如果我们想要将某个文件和文件夹拼接,可以使用path.resolve。

const basepath = 'User/haha'const filename = 'abc.txt'

登录后复制

5.png

path.resolve和path.join一样也可以进行路径的拼接,那么它们的区别是什么呢?

const basepath = '../User/haha'const filename = './abc.txt'const othername = './haha.js'const filePath1 = path.join(basepath, filename, othername)console.log(filePath1);const filePath2 = path.resolve(basepath, filename, othername)console.log(filePath2);

登录后复制

我们可以看到它们的差别。

6.png

fs模块

nodejs文件系统的API大都提供三种操作方式:

同步操作文件:代码会被阻塞,不会继续执行

异步回调函数操作文件:代码不会被阻塞,需要传入回调函数,当获取到结果时,回调函数执行

异步Promise操作文件:代码不会被阻塞,通过fs.promises调用方法操作,会返回一个Promise,可以通过then、catch进行处理。

读取文件状态(信息)

方式一 同步操作:fs.statSync

const fs = require('fs')const filepath = './abc.txt'const info = fs.statSync(filepath)console.log('后续需要执行的代码');console.log(info);

登录后复制

7.png

方式二 异步操作

fs.stat(filepath, (err, info) => {  if(err) {    console.log(err);    return  }  console.log(info);  console.log(info.isFile()); // 判断是否是一个文件  console.log(info.isDirectory()); // 判断是否是一个文件夹})console.log('后续需要执行的代码');

登录后复制

方式三: Promise

fs.promises.stat(filepath).then(info => {  console.log(info);}).catch(err => {  console.log(err);})console.log('后续需要执行的代码');

登录后复制

文件描述符

node为所有打开的文件分配了一个数字型的文件描述符。所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定的文件。

fs.open()方法用于分配新的文件描述符fd。一旦被分配,则文件描述符可用于从文件读取数据、向文件写入数据、或请求关于文件的信息。

const fs = require('fs')fs.open('./abc.txt', (err, fd) => {  if(err) {    console.log(err);    return  }  // 通过文件描述符去获取文件信息  fs.fstat(fd, (err, info) => {    console.log(info);  })})

登录后复制

文件的读写

fs.readFile(path[, options], callback):读取文件内容

fs.writeFile(path[, options], callback):往文件中写入内容

option参数:

flag: 写入的方式

encoding:字符的编码

文件的写入

fs.writeFile('./abc.txt', content, {flag: "a"}, err => {  console.log(err);})

登录后复制

文件的读取

fs.readFile('./abc.txt', (err, data) => {  console.log(data);})

登录后复制

如果不填写encoding,返回的结果Buffer(二进制)。

8.png

fs.readFile('./abc.txt', {encoding: 'utf-8'}, (err, data) => {  console.log(data);})

登录后复制

9.png

创建文件夹

使用fs.mkdir()或者fs.mkdirSync创建一个新的文件夹。

const fs = require('fs')// 创建文件夹const dirname = './haha'if(!fs.existsSync(dirname)) {  fs.mkdir(dirname, (err) => {    console.log(err);  })}

登录后复制

获取文件夹的内容

fs.readdir

fs.readdir(dirname, (err, files) => {  console.log(files);})

登录后复制

获取文件夹中的所有文件,此时目录如下图所示,可以使用递归。

10.png

const fs = require('fs')const path = require('path')const dirname = './haha'function getFiles(dirname) {  fs.readdir(dirname, {withFileTypes: true}, (err, files) => {    // console.log(files);    for(let file of files) {      // 判断是否是文件夹      if(file.isDirectory()) {        const filepath = path.resolve(dirname, file.name)        getFiles(filepath)      } else {        console.log(file.name);      }    }  })}getFiles(dirname)

登录后复制

重命名

可以使用fs.rename对文件夹进行重命名。

fs.rename('./haha', './xixi', err => {  console.log(err);})

登录后复制

更多node相关知识,请访问:nodejs 教程!

以上就是浅析node中的常用模块:path模块和fs模块的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2701851.html

(0)
上一篇 2025年3月7日 19:18:43
下一篇 2025年3月3日 22:58:02

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅析node esmodule模式下怎么调用commonjs模块

    本篇文章来继续node的学习,介绍一下esmodule模式下怎么调用commonjs模块,希望对大家有所帮助! 最近写nodejs脚本较多,遇到一个问题。修改了 package.json 的 type: “module&#822…

    2025年3月7日
    200
  • 聊聊node中的fs模块、path模块

    本篇文章带大家了解一下node中的fs文件系统模块和path路径模块,希望对大家有所帮助! fs文件系统模块 fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。 fs.r…

    2025年3月7日
    200
  • 聊聊V8的内存管理与垃圾回收算法

    本篇文章带大家了解一下v8引擎的内存管理与垃圾回收算法,希望对大家有所帮助! 众所周知,JS是自动管理垃圾回收的,开发者不需要关心内存的分配与回收。而且垃圾回收机制在前端面试中也是常考的部分。本文主要讲解V8的分代垃圾回收算法,希望阅读本文…

    2025年3月7日 编程技术
    200
  • 浅析利用node怎么获取mac系统版本

    利用node怎么获取mac系统版本?下面本篇文章给大家介绍一下利用node优雅地获取 mac 系统版本的方法,希望对大家有所帮助! 今天突然碰到了一个兼容性需求,需要根据不同 macOS 版本,进行不同的兼容性处理。 没想到看似简单的需求,…

    2025年3月7日
    200
  • node爬取数据实例:聊聊怎么抓取小说章节

    node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助! 准备用electron制作一个小说阅读工具练练手,那么首先要解决的就是数据问题,也就是小说的文本。 这里准备使用no…

    2025年3月7日 编程技术
    200
  • Vercel是什么?怎么部署Node服务?

    vercel是什么?本篇文章带大家了解一下vercel,并介绍一下在vercel中部署 node 服务的方法,希望对大家有所帮助! 之前在写node时,曾经就强缓存和协商缓存写过两个demo,但缓存要在服务端做,只能贴上代码,不能在网页上感…

    2025年3月7日 编程技术
    200
  • 什么是JWT?JWT怎么在nodejs中使用?

    什么是jwt?本篇文章带大家了解一下jwt,介绍一下jwt在node中的应用,以及jwt的优缺点,希望对大家有所帮助! 什么是JWT JWT也就是JSON Web Token的缩写,也就是为了在网络应用环境中一种认证解决方案,在传统的认证机…

    2025年3月7日 编程技术
    200
  • 浅析nodejs项目中package.json的常见属性

    本篇文章带大家了解一下node项目中的package.json配置文件,聊聊package.json中一些常见配置属性、环境相关属性、依赖相关属性和三方属性,希望对大家有所帮助! npm是前端开发人员广泛使用的包管理工具,项目中通过pack…

    2025年3月7日
    200
  • 浅谈Node第三方框架Express的使用方法

    本篇文章带大家了解一下node第三方框架express,简单聊聊如何使用好express框架,希望对大家有所帮助! 1.Express框架介绍 1.Express是node开发中一个非常重量级的第三方框架,它对于NodeJS服务端就相当于J…

    2025年3月7日
    200
  • 深入了解Node的模块机制,聊聊模块实现流程

    本篇文章带大家了解一下commonjs规范和node的模块机制,介绍一下node实现commonjs规范的基本流程,希望对大家有所帮助! 在CommonJs规范提出之前,Javascript是没有模块系统的,这意味着我们很难开发大型的应用,…

    2025年3月7日
    200

发表回复

登录后才能评论