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) => {
  /*************/
  /* "hello N"
  /* "ode.js"
  /************/
  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文件操作汇总的资料请关注我们其它相关文章!

(0)

相关推荐

  • NodeJS后端开发操作文件之读写文件

    目录 简介 创建文件夹 删除文件 删除文件夹 写入数据 读取数据 检查文件是否存在 总结 简介 操作文件是服务端一个基础的功能,也是做后端开发的必备能力之一.操作文件主要包括读和写.而这些功能 NodeJS 都已经提供了对应的方法.只要调用就行了. 创建文件夹 同步方法: const fs = require('fs') fs.mkdirSync(`${__dirname}/雷猴`) NodeJS有一个文件模块,叫fs .对文件操作的话,必须先引入这个模块. 使用fs.mkdirSync方法可以

  • Node.js基础入门之缓存区与文件操作详解

    目录 缓存区 1. 什么是缓存区? 2. 创建指定长度的缓存区 3. 通过数组创建缓存区 4. 通过字符串创建缓存区 5. 读写缓存区 6. 复制缓存区 文件操作 1. 异步直接读取 2. 同步直接读取 3. 流式读取 4. 写入文件 5. 流式写入文件 6. 读取文件信息 7. 删除文件 8. 管道 9. 链式流 经过前面三天的学习,Node.js的基础知识已逐渐掌握,今天继续学习缓存区和文件操作,并稍加整理加以分享,如有不足之处,还请指正. 缓存区 1. 什么是缓存区? JavaScript

  • 使用JS操作文件(FileReader读取--node的fs)

    目录 JS读取文件 FileReader 文档 事件和方法 基本使用 事件处理 node操作文件(readfile) 文件读取是一个异步操作 使用Promise 文件的写入 JS读取文件 FileReader FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据. 文档 FileReader 事件和方法 事件处理 FileReader.onabort 处理abort事件.该事件在读取操作被

  • Node.js文件操作方法汇总

    Node.js和其他语言一样,也有文件操作.先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开.关闭.读.写.文件信息.新建删除目录.删除文件.检测文件路径等.在node.js中也是一样,也都是这些功能,可能就是api与其他语言不太一样. 一.同步.异步打开关闭 /** * Created by Administrator on 2016/3/21. */ var fs=require("fs"); //同步读 fs.openSync = function(path,

  • node.js文件的复制、创建文件夹等相关操作

    nodeJS对文件的复制: 一般对于小型文件的复制操作使用的是流的管道运输操作, 首先需要加载引入的文件:var fs = require('fs'); 1.同步创建文件夹 fs.mkdirSync(yourfileDirPath); 异步创建文件夹 fs.mkdir(yourfileDirPath); 2.判断文件夹是否存在-同步 fs.existsSync(dirpath); 异步 fs.exists(dirpath); 利用上面的相关操作,我们可以直接写出一个方法判断创建文件夹, func

  • 使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解

    fs概述 文件 I/O 是由简单封装的标准 POSIX 函数提供的. nodeJS中通过 require('fs') 使用fs模块. 所有的方法都有异步和同步的形式. 异步形式始终以完成回调作为它最后一个参数. 传给完成回调的参数取决于具体方法,但第一个参数总是留给异常. 如果操作成功完成,则第一个参数会是 null 或 undefined //异步示例 var fs = require('fs'); fs.unlink('/tmp/hello', function(err){ if (err)

  • 总结Node.js中9种fs模块文件操作方法(文件夹递归删除知识)

    目录 一.前言 二.fs.mkdir()创建文件夹 2.1 最简单的案例 2.2 递归创建文件夹 三.fs.wirteFile()创建.写文件 3.1 创建并写入一个文件 3.2 重写文件并指定编码 3.3 写入GBK格式的文件 四.fs.appendFile()文件后追加内容 4.1 使用追加的方式创建并写入内容 4.2 追加内容 五.fs.stat()判断路径是目录还是文件 5.1 判断文件案例 六.fs.readFile()读取文件内容 6.1 以默认格式读取文件 6.2 以指定格式(这里

  • Node文件操作汇总实例详解

    目录 前言 文件系统 目录处理 读写文件 文件描述 监控文件 异步文件 删除文件 总结 前言 前两天我们介绍了 Nodejs 中 I/O 的重要组成部分:Buffer对象 和 Stream流,今天我们介绍 Nodejs 的文件系统,包括文件和目录的读写.删除,以及监听文件和目录的修改. 文件系统 Nodejs 内置的 fs模块 可与文件系统进行交互,封装了常规的 POSIX函数.POSIX(Portable Operating System Interface,可移植操作系统接口)是UNIX系统

  • MongoDB 查询操作的实例详解

    MongoDB 查询操作的实例详解 使用find或findOne进行查询.并可以进行范围查询.数据集查询.不等式查询,以及其他的一些查询. 查询将会返回DBcursor 游标只有在你需要的时候返回文档 针对游标返回的文档(结果集) 进行操作 例如:忽略一定数量的结果,或者返回结果的数量,以及对结果的排序. 1.指定需要返回的键 有时候仅仅对文档的某几个键值感兴趣,可以屏蔽返回的不感兴趣的键值,返回感兴趣的键值 mongos> db.blog.find({},{"name":1})

  • C++利用MySQL API连接和操作数据库实例详解

    1.C++连接和操作MySQL的方式 系列文章: MySQL 设计和命令行模式下建立详解 C++利用MySQL API连接和操作数据库实例详解 在Windows平台,我们可以使用ADO.ODBC或者MySQL API进行连接和操作.ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的一个用于存取数据源的COM组件.它提供了程序语言和统一数据访问方式OLE DB的一个中间层,也就是Microsoft提出的应用程序接口(API)用以实现访问关系或非关

  • java 解压与压缩文件夹的实例详解

     java 解压与压缩文件夹的实例详解 注意:JDK7支持设置编码设置编码格式 zipFile,zipInputStream,zipOutputStream都增加了编码格式,如果是jdk1.6需要其他的包辅助 下面为自带jdk压缩文件夹代码: public void dozip(String srcfile, String zipfile) throws IOException { String temp = ""; File src = new File(srcfile); File

  • 对Python多线程读写文件加锁的实例详解

    Python的多线程在io方面比单线程还是有优势,但是在多线程开发时,少不了对文件的读写操作.在管理多个线程对同一文件的读写操作时,就少不了文件锁了. 使用fcntl 在linux下,python的标准库有现成的文件锁,来自于fcntl模块.这个模块提供了unix系统fcntl()和ioctl()的接口. 对于文件锁的操作,主要需要使用 fcntl.flock(fd, operation)这个函数. 其中,参数 fd 表示文件描述符:参数 operation 指定要进行的锁操作,该参数的取值有如

  • Linux上的文件搜索命令实例详解

    locate 基础了解 在centos7上默认没有locate命令,需要先手动安装.安装步骤:http://www.cnblogs.com/feanmy/p/7676717.html locate命令搜索的后台数据库路径:/var/lib/mlocate/mlocate.db ls -hl /var/lib/mlocate total 1.2M -rw-r----- 1 root slocate 1.2M Oct 16 14:36 mlocate.db 更新数据库使用updatedb,配置文件为

  • Vue.js进行查询操作的实例详解

    Vue.js进行查询操作的实例详解 实例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="../lib/vue.min.js" type="text/javascript" ></script> <title>字符转换</title> </head>

  • IOS 简单的本地json格式文件解析的实例详解

    IOS 简单的本地json格式文件解析的实例详解 ljweibo.json文件 { "data":[{ "name" : "孙悟空", "content" : "7月12日的国务院常务会议上,李克强明确要求,要将已审议的<快递条例(草案)>向社会公开征求意见.在会上,总理说了这么一段话:"几年前,快递业刚刚开始发展的时候,有些城市不允许快递存在,理由是影响市容整洁,快递员骑的摩的也不允许停放.但

  • php mysql PDO 查询操作的实例详解

    php mysql PDO 查询操作的实例详解 <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->exec('set names utf8'); /*添加*/ //$sql = "INSERT INTO `user` SET `log

  • Python字符串和字典相关操作的实例详解

    Python字符串和字典相关操作的实例详解 字符串操作: 字符串的 % 格式化操作: str = "Hello,%s.%s enough for ya ?" values = ('world','hot') print str % values 输出结果: Hello,world.hot enough for ya ? 模板字符串: #coding=utf-8 from string import Template ## 单个变量替换 s1 = Template('$x, glorio

随机推荐