【Node.js】深度解析常用核心模块-fs模块

简介: 【Node.js】深度解析常用核心模块-fs模块

3.pngbc0a1383de8647a2bccf04d07404ad70.png


fs 文件系统模块


什么是fs文件模块系统


fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求,该模块的所有方法都有同步和异步两种方式。


JavaScript 的是没有操作文件的能力,但是 Node 是可以做到的,Node 提供了操作文件系统模块,是 Node 中使用非常重要和高频的模块,是绝对要掌握的一个模块系统。


  • fs 模块中所有的操作都有两种形式可供选择:同步和异步
  • 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码
  • 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回,然后可以立即向下执行代码
  • 一般情况下我们使用的都是异步方式!比起同步,异步方法性能更高,速度更快,而且没有阻塞。


打开文件


格式 : fs.open(path, flags[, mode], callback)

path : 文件的路径

flags : 文件打开的行为。具体值详见下方表格

mode : 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)

callback : 回调函数,带有两个参数如:callback(err, fd)


image.png


示例代码:


const fs = require('fs')
fs.open('./file/new成绩.txt','r+',function(err,result) {
    if(err) {
        return console.log('打开文件失败' + err.message);
    } 
    console.log('打开文件成功' + result);
})

fc66f9e2a1d442b0acd7e6caa173844f.png


在这里,首先要导入fs模块,node中导入模块需要使用内置的require()方法,这里的回调函数中,如果文件存在的话err会返回null,在js中null会默认转换为false,如果文件不存在的话,则err会返回一个错误对象,错误对象会转化为true,从而在这里去写一个判断输出逻辑!


获取文件信息


语法格式 : fs.stat(path, callback)

path : 文件路径

callback : 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。


stats类中的方法:


image.png


示例代码:


const fs = require('fs')
fs.stat('./file/new成绩.txt', function (err, stats) {
    if (err) {
        return console.error(err);
    }
    console.log("读取文件信息成功!");
    // 检测文件类型
    console.log("是否为文件(isFile) ? " + stats.isFile());
    console.log("是否为目录(isDirectory) ? " + stats.isDirectory());    
 });

1.png


获取文件信息用的更多的方法是isFile()和isDirectory(),主要是来判断该文件是否属于文件或者是否属于目录!


读取文件


语法格式 : fs.readFile(path[, options], callback)


path:文件路径


  • options:配置选项,若是字符串则指定编码格式

      encoding:编码格式

      flag:打开方式

  • callback:回调函数

      err:错误信息

      data:读取的数据,如果未指定编码格式则返回一个 Buffer


示例代码 :


const fs = require('fs')
fs.readFile('./file/11.txt','utf-8',function(err,data) {
    console.log(err);
    console.log('--------');
    console.log(data);
})

2.png


写入文件


语法格式 : fs.writeFile(file, data[, options], callback)

file:文件路径

data:写入内容

options:配置选项,包含 encoding, mode, flag;若是字符串则指定编码格式

callback:回调函数


示例代码 :



const fs = require('fs')
fs.writeFile('./file/2.txt','hello node.js','utf-8',function(err,data) {
    //如果文件写入成功,则err的值等于null    null可以转化为false
    //如果写入文件失败,则err是一个错误对象
    console.log(err);
    if(err) {
        return console.log('文件写入失败' + err.message);
    }
    console.log('文件写入成功');
})


路径动态拼接问题


  • 在使用 fs 模块操作文件时,如果提供的操作路径是以./ 或 ../开头的相对路径时,容易出现路径动态拼接错误的问题
  • 原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径
  • 解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,从而防止路径动态拼接的问题
  • __dirname 可以获取文件所处的绝对路径


示例代码 :



const fs = require('fs')
fs.readFile(`${__dirname}/file/11.txt`,'utf-8',function(err,data) {
    if(err) {
       return console.log('文件读取失败' + err.message);
    }
    console.log(__dirname);  //D:\node复盘\01
    console.log('文件读取成功!' + data);
})

3.png



在这里打印了__dirname,我们可以发现,打印出来的路径和我们终端打开文件的绝对路径是一样的,所以这样的话就可以解决我们有时候使用../或./时出现的路径问题了!


其他操作


验证路径是否存在:


  • fs.exists(path, callback)
  • fs.existsSync(path)


删除文件:


  • fs.unlink(path, callback)
  • fs.unlinkSync(path)


列出文件:


  • fs.readdir(path[,options], callback)
  • fs.readdirSync(path[, options])


截断文件:


  • fs.truncate(path, len, callback)
  • fs.truncateSync(path, len)


建立目录:


  • fs.mkdir(path[, mode], callback)
  • fs.mkdirSync(path[, mode])


删除目录:


  • fs.rmdir(path, callback)
  • fs.rmdirSync(path)


重命名文件和目录:


  • fs.rename(oldPath, newPath, callback)
  • fs.renameSync(oldPath, newPath)


监视文件更改:


  • fs.watchFile(filename[, options], listener)


关闭文件 :


  • fs.close(fd, callback)


小结


本篇文章主要是学习fs模块的常用api,其实最常用的就是读写操作,其他的操作了解即可,node中使用最多的一个知识点就是回调函数,通过回调函数得以实现多处功能,近期我将会出一篇js的回调函数文章,帮助大家更轻松的学会回调!如果大家对其他的fs操作有兴趣的话可以在菜鸟教程中学习了解!


相关文章
|
27天前
|
存储 编译器 BI
掌握Go语言:Go语言基础构建模块解析,优缺点及进销存项目实战(2)
掌握Go语言:Go语言基础构建模块解析,优缺点及进销存项目实战(2)
|
2月前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
2天前
|
存储 前端开发 中间件
🚀React+Node全栈无死角解析,吃透文件上传的各个场景
🚀React+Node全栈无死角解析,吃透文件上传的各个场景
|
2天前
|
缓存 JavaScript 前端开发
Node.js的模块系统:CommonJS模块系统的使用
【4月更文挑战第29天】Node.js采用CommonJS作为模块系统,每个文件视为独立模块,通过`module.exports`导出和`require`引入实现依赖。模块有独立作用域,保证封装性,防止命名冲突。引入的模块会被缓存,提高加载效率并确保一致性。利用CommonJS,开发者能编写更模块化、可维护的代码。
|
8天前
|
JavaScript IDE 编译器
TypeScript中模块路径解析与配置:深入剖析与最佳实践
【4月更文挑战第23天】本文深入探讨了TypeScript中模块路径解析的原理与配置优化,包括相对路径、Node.js模块解析和路径别名。通过配置`baseUrl`、`paths`、`rootDirs`以及避免裸模块名,可以提升开发效率和代码质量。建议使用路径别名增强代码可读性,保持路径结构一致性,并利用IDE插件辅助开发。正确配置能有效降低维护成本,构建高效可维护的代码库。
|
9天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
9天前
|
前端开发 JavaScript 编译器
深入解析JavaScript中的异步编程:Promises与async/await的使用与原理
【4月更文挑战第22天】本文深入解析JavaScript异步编程,重点讨论Promises和async/await。Promises用于管理异步操作,有pending、fulfilled和rejected三种状态。通过.then()和.catch()处理结果,但可能导致回调地狱。async/await是ES2017的语法糖,使异步编程更直观,类似同步代码,通过事件循环和微任务队列实现。两者各有优势,适用于不同场景,能有效提升代码可读性和维护性。
|
16天前
|
JavaScript API
node.js之模块系统
node.js之模块系统
|
18天前
|
域名解析 网络协议 JavaScript
【Node系列】node工具模块
Node.js有多个内置的工具模块,这些模块提供了用于执行各种任务的功能。
22 2
|
23天前
|
小程序 开发者
微信小程序“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?
微信小程序“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?

推荐镜像

更多