我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Node文件操作汇总实例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Node文件操作汇总实例详解

前言

前两天我们介绍了 Nodejs 中 I/O 的重要组成部分:Buffer对象Stream流,今天我们介绍 Nodejs 的文件系统,包括文件和目录的读写、删除,以及监听文件和目录的修改。

文件系统

Nodejs 内置的 fs模块 可与文件系统进行交互,封装了常规的 POSIX函数。POSIX(Portable Operating System Interface,可移植操作系统接口)是UNIX系统的一个设计标准。fs模块提供了多个操作目录和文件的方法,大多会有同步和异步两种版本。同步的方法名称会以Sync为后缀。

目录处理

fs模块的 readdir() 方法可异步的读取目录内容。回调函数包含两个参数,第一个是错误对象,第二个是一个包含文件名称的数组,对应的同步方法是 readdirSync() 。在下面的示例中,当前目录包含两个文件,上一级目录包含一个目录名称。

const fs = require('fs');
fs.readdir('./', (err, files) => {
  console.log(files);        //[ 'demo.txt', 'index.js' ]
});
fs.readdir('../', (err, files) => {
  console.log(files);        //[ '1' ]
});

其它处理目录的方法还有 opendir()mkdir() 等。

读写文件

在fs模块中,可使用批量方法 readFile() 将文件内容一次性的加载到内存中,如下所示。

const fs = require('fs');
fs.readFile('./origin.txt', (err, buf) => {
  console.log(buf.toString());        //"hello Node.js"
});

对应的写入方法是 writeFile() ,如下所示。

fs.writeFile('./target.txt', 'hello Node.js', (err) => {
  if (err) throw err;
  console.log('文件已被保存');
});

? 文件路径、写入内容和回调函数是必传的参数。如果文件不存在,那么会自动创建。

当文件很大时,该方法会因V8内存不足而出现问题。此时可以改用之前提到的流式方法 createReadStream(),分批次的读取文件。

如下所示,每次只读7个字节的内容。

const readable = fs.createReadStream('./origin.txt', {highWaterMark: 7});
readable.on("data", (chunk) => {
  
  
  console.log(chunk.toString());
});

通过管道方法 pipe()origin.txt 中的内容写入到 target.txt 中,如下所示,对于不存在的文件,也会自动创建。

const writable = fs.createWriteStream('./target.txt');
readable.pipe(writable);

文件描述

fs模块的 stat() 方法可读取文件的描述信息,如下所示。

fs.stat('./demo.txt', (err, stats) => {
  console.log(stats);
});

回调函数中的stats参数是一个 fs.Stats对象 ,其属性如下所示。它还包含一些判断方法,例如isDirectory()、isFile()等。

Stats {
  dev: 195650,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 36873221949682120,
  size: 13,
  blocks: undefined,
  atimeMs: 1586227933993.0217,
  mtimeMs: 1585882949091.0166,
  ctimeMs: 1586227933995.0222,
  birthtimeMs: 1586227933993.0217,
  atime: 2020-04-07T02:52:13.993Z,
  mtime: 2020-04-03T03:02:29.091Z,
  ctime: 2020-04-07T02:52:13.995Z,
  birthtime: 2020-04-07T02:52:13.993Z
}

fs模块还提供了 fstat() 方法,在功能上与 stat() 等价,只是 fstat() 方法的第一个参数是文件描述符。在POSIX系统中,文件描述符是一个正整数,它实际上是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当打开或创建一个文件时,就会被分配一个文件描述符。

在下面的示例中,open() 方法的回调函数中包含一个 fd参数(即文件描述符),搭配 fstat() 方法就能读取文件信息:

fs.open('./demo.txt', 'r', (err, fd) => {
  fs.fstat(fd, (err, stats) => {
    console.log(stats);
  });
});

监控文件

fs模块提供了两种方法来监控文件:watch()watchFile() ,前者能监控文件或目录的更改,后者只能监控文件的更改。

watch() 方法的监听器回调包含两个参数,第一个是事件类型(包括rename和change),第二个是触发事件的文件名称,如下所示:

fs.watch('./demo.txt', (eventType, filename) => {
  console.log(eventType, filename);
});

执行node命令后,每次更改demo.txt文件,就会在控制台打印出下面这条语句。

$ node index.js
change demo.txt

虽然 watch() 方法的性能优于 watchFile() 方法,但是 watch() 不是一个跨平台的方法,其表现在各个平台中并非百分百一致(例如filename参数不能保证提供),而 watchFile() 是跨平台的。

异步文件

fs.promises 是 Nodejs 提供的一组备用的异步文件系统方法,它们会返回Promise对象而不是通过回调来处理结果。例如以Promise的方式使用 stat() 方法,如下所示。

const fsPromises = require('fs').promises;
fsPromises.stat('./demo.txt').then(stats => {
  console.log(stats);
});

删除文件

Nodejs 中 fs模块 提供了 unlink()rm() 两个方法来删除文件。下面的代码实现了删除当前文件夹下的 toBeDel.txt 文件:

const fs = require('fs');
fs.unlink('./toBeDel.txt', (err) => {
    if (!err) {
        console.log(err);
    }
});
// or
fs.rm('./toBeDel.txt', (err) => {
    if (!err) {
        console.log(err);
    }
})

如果要删除文件夹,可以使用 rmdir() 方法,用法同 rm() 方法一样。

? rm() 同时支持删除目录和文件,而 unlink() 只能用于删除文件。

总结

fs模块 提供了大量对文件的操作的API,你无需去全部记住他们,只需像在学习 Linux 时简单记住那些基础的命令即可:

  • fs.stat 读取文件的描述信息
  • fs.mkdir 创建目录 (创建之前先判断是否存在)
  • fs.writeFile 写入文件(文件不存在就创建,但不能创建目录)
  • fs.appendFile 写入追加文件
  • fs.readFile 读取文件
  • fs.readdir 读取目录
  • fs.rename 重命名
  • fs.rmdir 删除目录
  • fs.unlinkfs.rm 删除文件

以上就是Node文件操作汇总实例详解的详细内容,更多关于Node文件操作汇总的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Node文件操作汇总实例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Node文件操作汇总实例详解

这篇文章主要为大家介绍了Node文件操作汇总实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Node.js文件操作方法汇总

Node.js和其他语言一样,也有文件操作。先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开、关闭、读、写、文件信息、新建删除目录、删除文件、检测文件路径等。在node.js中也是一样,也都是这些功能,可能就是api与其
2022-06-04

node操作mysql数据库实例详解

本文实例讲述了node操作mysql数据库的方法。分享给大家供大家参考,具体如下: 1、建立数据库连接:createConnection(Object)方法 该方法接受一个对象作为参数,该对象有四个常用的属性host,user,passwo
2022-06-04

Python对文件操作知识汇总

打开文件 操作文件 1打开文件时,需要指定文件路径和打开方式 打开方式: r:只读 w:只写 a:追加 “+”表示可以同时读写某个文件 r+:读写 w+:写读 a+:同a U"表示在读取时,可以将 r n rn自动转换成 n (与 r 或
2022-06-04

python的文件操作方法汇总

文件的读操作 示例:print("->文件句柄的获取,读操作:")f = open('无题','r',encoding='utf8')d = f.read()f.close()print(d)print('->例二:')f = open('
2022-06-04

Python复制文件操作实例详解

本文实例讲述了Python复制文件操作用法。分享给大家供大家参考,具体如下: 这里用python实现了一个小型的自动发版本的工具。这个“自动发版本”有点虚, 只是简单地把debug 目录下的配置文件复制到指定目录,把Release下的生成文
2022-06-04

Android 文件操作详解及简单实例

Android 文件操作详解 Android 的文件操作说白了就是Java的文件操作的处理。所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了。好了,话不多说,开始今天的正题吧。 先从一个小项目入门吧 首
2022-06-06

python文件与目录操作实例详解

本文实例分析了python文件与目录操作的方法。分享给大家供大家参考,具体如下: 关于python文件操作的详细说明,大家可以参考前一篇《python文件操作相关知识点总结整理》 官方API:os-Miscellaneous operati
2022-06-04

Android对sdcard扩展卡文件操作实例详解

Android对sdcard扩展卡文件的操作其实就是普通的文件操作,但是仍然有些地方需要注意。比如: 1.加入sdcard操作权限; 2.确认sdcard的存在; 3.不能直接在非sdcard的根目录创建文件,而是需要先创建目录,再创建文件
2022-06-06

C#实现XML文件操作详解

这篇文章主要为大家详细介绍了如何利用C#实现XML操作文件,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-23

Node.js文件操作详解

Node有一组数据流API,可以像处理网络流那样处理文件,用起来很方便,但是它只允许顺序处理文件,不能随机读写文件。因此,需要使用一些更底层的文件系统操作。 本章覆盖了文件处理的基础知识,包括如何打开文件,读取文件某一部分,写数据,以及关闭
2022-06-04

编程热搜

目录