浅析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操作系统使用/作为路径分隔符 。
浅析node中的常用模块:path模块和fs模块

文章插图

解决上述问题, 我们可以使用path.resolve来进行路径的拼接 。
const path = require('path')const basePath = '/user/why'const filename = 'abc.txt'const filePath = path.resolve(basePath, filename)console.log(filePath);
浅析node中的常用模块:path模块和fs模块

文章插图

从路径中获取信息
    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));
浅析node中的常用模块:path模块和fs模块

文章插图

路径拼接如果我们想要把多个路径进行拼接, 但是不同的操作系统可能使用不同的分隔符, 我们可以使用path.join函数 。
const path = require('path')const basepath = '/User/haha'const filename = 'abc.txt'const filePath = path.join(basepath, filename)console.log(filePath);
浅析node中的常用模块:path模块和fs模块

文章插图

将文件和某个文件夹拼接如果我们想要将某个文件和文件夹拼接, 可以使用path.resolve 。
const basepath = 'User/haha'const filename = 'abc.txt'
浅析node中的常用模块:path模块和fs模块

文章插图

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);我们可以看到它们的差别 。
浅析node中的常用模块:path模块和fs模块

文章插图

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);
浅析node中的常用模块:path模块和fs模块

文章插图

方式二 异步操作
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); })})

推荐阅读