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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 【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操作有兴趣的话可以在菜鸟教程中学习了解!


相关文章
|
3月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
136 62
|
3月前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
53 2
|
3月前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
107 0
|
3月前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
37 0
|
3月前
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
31 0
|
3月前
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
2月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
36 1
JavaScript中的原型 保姆级文章一文搞懂
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
118 2
|
2月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
23 0
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
164 4

推荐镜像

更多