本文实例讲述了node.js中fs文件系统模块的使用方法。分享给大家供大家参考,具体如下:

node.js中为我们提供了fs文件系统模块,实现对文件或目录的创建,修改和删除等操作。

fs模块中,所有的方法分为同步和异步两种实现。

有 sync 后缀的方法为同步方法,没有 sync 后缀的方法为异步方法。

一、文件的整个读取

const fs = require('fs');
//参数一表示读取的文件
//参数二表示读取的配置,{encoding:'null', flag:'r'}
//encoding 表示编码方式
//flag 表示文件系统标志
//如果没有指定参数二中的encoding,则data返回的是一个Buffer
fs.readFile('./1.txt', function (err, data) {
  console.log(data);
});
//如果指定了,则data返回的是解析后的字符串
fs.readFile('./1.txt', {'encoding': 'utf8', 'flag': 'r'}, function (err, data) {
  console.log(data);
});

或同步读取:

const fs = require('fs');
let data = fs.readFileSync('./1.txt');
console.log(data);
let data2 = fs.readFileSync('./1.txt', {'encoding': 'utf8'});
console.log(data2);

二、往文件写入数据

const fs = require('fs');
//参数一表示需要写入的文件
//参数二表示写入的数据
//参数三表示写入配置 {encoding:'utf8', mode:'0o666', flag:'w'}
//encoding 表示文件编码
//mode 表示文件权限
//flag 表示表示文件系统标志
fs.writeFile('./1.txt', '数据', {'mode': 0o666, 'flag': 'w'}, function (err) {
  console.log(err);
});
//注意如果文件已存在,默认会覆盖写入
fs.writeFile('./1.txt', '你好', function (err) {
  console.log(err);
});
//如果想追加写入,将flag设置为'a'就可以了。
fs.writeFile('./1.txt', '你好', {'flag': 'a'}, function (err) {
  console.log(err);
});

注意,writeFile() 默认会以覆盖的方式写入数据。

或者同步写入数据:

const fs = require('fs');
fs.writeFileSync('./1.txt', '数据');

关于 mode 文件权限的说明:

在linux中文件的权限会为3种,4-表示可读,2-表示可写,1-表示可执行。它们之间的相互组合形成不同权限。

对于文件,有三个权限分配,1:文件所有者,2:文件所属组,3:其他用户。

关于 flag 文件系统标志的说明:

r 表示 读取
表示 写入
表示 同步
表示 追加
表示 文件存在就报错
  表示 增加相反操作

r 与 w 区别,文件不存在时,r 不会创建文件,而 w 会创建。如果文件存在 r 不会清空文件,而 w 会清空文件。

三、往文件中追加数据

const fs = require('fs');
fs.appendFile('./1.txt', '数据', function (err) {
  console.log(err);
});
fs.appendFileSync('./1.txt', '同步追加');

四、拷贝文件

const fs = require('fs');
//参数一表示源文件
//参数二表示目标文件
//参数三表示拷贝操作的修饰符,默认0
//参数四表示回调函数
fs.copyFile('./1.txt', './2.txt', function (err) {
  console.log(err);
});
//同步拷贝文件
fs.copyFileSync('./1.txt', './3.txt');

五、打开文件,读取文件,写入文件

const fs = require('fs');
//参数一表示文件路径
//参数二表示文件系统标志
//参数三表示文件权限
//参数四表示回调函数,err表示错误,fd表示文件描述符,是一个整型
fs.open('./1.txt', 'r ', 0o666, function (err, fd) {
  //创建一个3字节的Buffer,用来接收数据
  let rbuf = Buffer.alloc(3);
  //参数一表示文件描述符
  //参数二表示接收数据的Buffer
  //参数三表示往Buffer中写入的偏移量
  //参数四表示读取的字节数
  //参数五表示从文件中读取的位置,如果为null,则是文件的当前位置读取
  //参数六表示回调函数,err表示错误,bytesRead表示实际读取的字节,buffer表示接收数据的Buffer
  fs.read(fd, rbuf, 0, 3, 0, function (err, bytesRead, buffer) {
    console.log(rbuf.toString());
    console.log(bytesRead);
  });
  let wbuf = Buffer.from('中国');
  //参数一表示文件描述符
  //参数二表示写入数据的Buffer
  //参数三表示往Buffer中读取的偏移量
  //参数四表示写入的字节数
  //参数五表示从文件中写入的位置,如果不等于数字,则从文件的当前位置写入
  //参数六表示回调函数,err表示错误,written表示实际写入的字节数,buffer表示写入数据的Buffer
  fs.write(fd, wbuf, 0, 3, fs.stat, function (err, written, buffer) {
    console.log(written);
  });
});

六、同步磁盘缓存,把缓冲区数据刷新到文件中。

const fs = require('fs');
fs.open('./1.txt', 'w ', 0o666, function (err, fd) {
  let data = Buffer.from('数据\n');
  let task = [];
  //我们往文件中循环写入数据
  for (ix = 0; ix < 1000; ix  ) {
    task.push(function () {
      return new Promise((resolve, reject) => {
        fs.write(fd, data, 0, data.length, null, function (err, written, buffer) {
          if (err) {
            reject(err);
          } else {
            resolve(written);
          }
        });
      });
    });
  }
  Promise.all(task.map(fn => fn())).then(value => {
    console.log(value);
  }, reason => {
    console.log(reason);
  });
  //当们写完数据后,一般会强制刷新缓冲区,让数据写入到文件里,然后关闭文件。
  //因为系统为了效率,我们写入的数据通常会放到一个缓冲区中,当缓冲区满了后,系统就一次把数据写到文件。
  fs.fsync(fd, function (err) {
    console.log(err);
    //关闭文件
    fs.close(fd, function (err) {
      console.log(err);
    })
  });
});

七、创建目录

const fs = require('fs');
//创建目录,默认情况下不支持递归创建目录
fs.mkdir('./a', function (err) {
  console.log(err);
});
//通过设置参数二中的recursive为true,则可以递归创建目录
fs.mkdir('./a/b/c', {'recursive': true}, function (err) {
  console.log(err);
});

八、删除目录

const fs = require('fs');
//rmdir无法删除非空目录
fs.rmdir('./a', function (err) {
  console.log(err);
});

九、测试文件或目录是否存在,是否可读,是否可写

const fs = require('fs');
let path = './a';
//判断是否存在
fs.access(path, fs.constants.F_OK, function (err) {
  console.log(err ? '不存在' : '存在');
});
//判断是否可读
fs.access(path, fs.constants.R_OK, function (err) {
  console.log(err ? '不可读' : '可读');
});
//判断是否可写
fs.access(path, fs.constants.W_OK, function (err) {
  console.log(err ? '不可写' : '可写');
});

十、读取目录下的所有文件

const fs = require('fs');
const path = require('path');
//读取目录下所有文件
fs.readdir('./a', function (err, files) {
  console.log(files);
});
//递归的读取一个目录所有文件
function readDir(dir) {
  fs.stat(dir, function (err, stats) {
    if (stats.isDirectory()) {
      console.log(dir);
      fs.readdir(dir, function (err, files) {
        files.map(value => {
          let cur = path.join(dir, value);
          fs.stat(cur, function (err, stats) {
            if (stats.isDirectory()) {
              readDir(cur);
            } else {
              console.log(cur);
            }
          });
        });
      });
    } else {
      console.log(dir);
    }
  });
}
readDir('./node_modules');

十一、查看文件或目录的详细信息

const fs = require('fs');
//获取目录详细信息
fs.stat('./a', function (err, stats) {
  console.log(stats);
});
//获取文件详细信息
fs.stat('./1.txt', function (err, stats) {
  console.log(stats);
});

  • stats.size 表示文件大小。
  • stats.atime 表示文件中的数据最后访问时间。
  • stats.mtime 表示文件中的内容修改最后时间。
  • stats.ctime 表示文件权限,拥有者,所属组,链接数发生改变时的时间。
  • stats.birthtime 表示文件创建时间。

十二、重命名或移动文件

const fs = require('fs');
//重命名文件
fs.rename('./1.txt', './b.txt', function (err) {
  console.log(err);
});
//移动文件
fs.rename('./2.txt', './a/b/c/2.txt', function (err) {
  console.log(err);
});

十三、删除文件

const fs = require('fs');
//删除文件
fs.unlink('./3.txt', function (err) {
  console.log(err);
});

十四、截取文件

const fs = require('fs');
//截取文件成3个字节
fs.truncate('./b.txt', 3, function (err) {
  console.log(err);
});

十五、监视文件或目录的状态改变

const fs = require('fs');
//监视目录
fs.watchFile('./a', function (curr, prev) {
  console.log(curr);
  console.log(prev);
  if (curr.mtimeMs !== prev.mtimeMs) {
    console.log('内容发生的改变');
  }
});

希望本文所述对大家node.js程序设计有所帮助。

node.js中fs文件系统模块的使用方法实例详解的更多相关文章

  1. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. node.js三个步骤实现一个服务器及Express包使用

    这篇文章主要介绍了node.js三个步骤实现一个服务器及Express包使用,文章通过新建一个文件展开全文内容,具有一定的参考价值,需要的小伙伴可以参考一下

  3. Node.js调试技术总结分享

    Node.js是一个可以快速构建网络服务及应用的平台。该平台的构建是基于Chrome's JavaScript runtime,也就是说,实际上它是对Google V8引擎(应用于Google Chrome浏览器)进行了封装。 今天介绍Node.js调式目前有几种技术,需要的朋友可以参考下。

  4. node.js实现http服务器与浏览器之间的内容缓存操作示例

    这篇文章主要介绍了node.js实现http服务器与浏览器之间的内容缓存操作,结合实例形式分析了node.js http服务器与浏览器之间的内容缓存原理与具体实现技巧,需要的朋友可以参考下

  5. 教你如何使用node.js制作代理服务器

    本文介绍了如何使用node.js制作代理服务器,图文并茂,十分的详细,代码很简洁易懂,这里推荐给大家。

  6. node.js中的fs.openSync方法使用说明

    这篇文章主要介绍了node.js中的fs.openSync方法使用说明,本文介绍了fs.openSync方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下

  7. Node.js+ELK日志规范的实现

    这篇文章主要介绍了Node.js+ELK日志规范的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. node.js爬虫框架node-crawler初体验

    这篇文章主要介绍了node.js爬虫框架node-crawler的相关资料,帮助大家利用node.js进行爬虫,感兴趣的朋友可以了解下

  9. node.js中的fs.existsSync方法使用说明

    这篇文章主要介绍了node.js中的fs.existsSync方法使用说明,本文介绍了fs.existsSync方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下

  10. 说说如何利用 Node.js 代理解决跨域问题

    这篇文章主要介绍了Node.js代理解决跨域问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. Error: Cannot find module ‘node:util‘问题解决

    控制台 安装 Vue-Cli 最后一步出现 Error: Cannot find module 'node:util' 问题解决方案1.问题C:\Windows\System32>cnpm install -g @vue/cli@4.0.3internal/modules/cjs/loader.js:638 throw err; &nbs

  2. yarn的安装和使用(全网最详细)

    一、yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。二、yarn的特点:速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。三、y

  3. 前端环境 本机可切换node多版本 问题源头是node使用的高版本

    前言投降投降 重头再来 重装环境 也就分分钟的事 偏要折腾 这下好了1天了 还没折腾出来问题的源头是node 使用的高版本 方案那就用 本机可切换多版本最终问题是因为nodejs的版本太高,导致的node-sass不兼容问题,我的node是v16.14.0的版本,项目中用了"node-sass": "^4.7.2"版本,无法匹配当前的node版本根据文章的提

  4. nodejs模块学习之connect解析

    这篇文章主要介绍了nodejs模块学习之connect解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. nodejs npm package.json中文文档

    这篇文章主要介绍了nodejs npm package.json中文文档,本文档中描述的很多行为都受npm-config(7)的影响,需要的朋友可以参考下

  6. 详解koa2学习中使用 async 、await、promise解决异步的问题

    这篇文章主要介绍了详解koa2学习中使用 async 、await、promise解决异步的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. Node.js编写爬虫的基本思路及抓取百度图片的实例分享

    这篇文章主要介绍了Node.js编写爬虫的基本思路及抓取百度图片的实例分享,其中作者提到了需要特别注意GBK转码的转码问题,需要的朋友可以参考下

  8. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. node.js三个步骤实现一个服务器及Express包使用

    这篇文章主要介绍了node.js三个步骤实现一个服务器及Express包使用,文章通过新建一个文件展开全文内容,具有一定的参考价值,需要的小伙伴可以参考一下

  10. node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

返回
顶部