NodeJs 之文件模块

前言

Node.js 文件系统(fs 模块), 为我们提供了目录和文件的创建,删除,以及读写操作 .

模块中的方法均有异步和同步,例,读取文件内容函数 :
异步的 fs.readFile()
同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数是 error ,第二个是成功返回 res ,建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

这里的最后一个参数,大家请注意,就是调用函数的最后一个参数可以直接写回调函数,中间参数可忽略不计

fs模块常用的方法有如下几个,其它的截取,关闭,打开 ; 我就不一一列举了, 在这里说一说以下几个方法的常规使用 , 同步异步我就不做过多的解释,这里统一用异步方式去实践 .

// 这些方法的使用都是 fs.方法名()
readFile() readFileSync()  // 读文件 - 异步同步
writeFile() writeFileSync() // 写文件(创建文件) - 异步同步
unlink() unlinkSync() // 删除文件 - 异步同步
mkdir()  mkdirSync() // 创建目录  - 异步同步
readdir() readdirSync() // 读取目录 - 异步同步
rmdir() rmdirSync() // 删除目录 - 异步同步
exists(path, callback) // 判断path是否存在 也有同步和异步
stat() // 返回一个对象包含当前读取目录或者文件的内容及信息

注意:实例中的参数使用并不完全,我只是为了演示功能性的必要参数和回调,具体更多参数请参考官方文档

读文件
这里要注意,返回的文件内容是 Buffer 类二进制数据流,需要使用toString() 方可看到真是内容

fs.readFile("./input.txt", function (err, res) {
  if (err)  throw err
  console.log(res)
  console.log(res.toString())
})
// PS C:\HiSen\myWorkDemo\node_demo> node .\fs.js
// <Buffer 68 65 6c 6c 6f 20 e5 9b 9e e8 b0 83 e5 87 bd e6 95 b0>
// hello 回调函数

写文件
写文件第一个参数 path 传入的路径如果存在就会改写该文件里的内容, 如果不存在则会自动创建该文件并写入第二个参数的内容

fs.writeFile("./input.txt", "文件要写的内容", function (err) {
  if (err) throw err
})

删文件
在这里做删除的时候一般需要进行一个文件是否存在的判断,用到了函数 exists , 后边会写如何使用它.

// 删除文件
fs.unlink("./input2.txt", function (err) {
  if (err) throw err
})

创建目录
注意, 这里的函数方法不能同时创建多个目录,如:fs.mkdir("./A/B/C") 虽然文档有写是否递归创建的参数 recursive 给值为 true 就可以创建,不过我试验了,貌似不行,可能是我node版本的问题 ? 所以如果需要递归创建多个层级目录, 大家可以写一个递归函数调用.这里不做演示,度娘一大把 .

var fs = require("fs");
fs.mkdir("./nodeFs", function (err) {
  if (err) throw err
  console.log("创建成功")
})

读取目录
读取目录,返回结果是目录下的文件夹和文件名加后缀的数组,如下实例,我们在 nodeFs 文件夹下创建 一个文件夹 f1 , 两个文本文件分别是 1.txt , 2.txt . 返回结果 [ '1.txt', '2.txt', 'f1' ]

fs.readdir("./nodeFs", function (err, res) {
  if (err) throw err
  console.log(res) // [ '1.txt', '2.txt', 'f1' ]
})

删除目录

fs.rmdir("./nodeFs2", function (err) {
  if (err) throw err
})

判断path 是否存在, exists
这里的 path 可以是目录也可以是文件, 返回一个布尔值 , true 存在 false 不存在

fs.exists("./nodeFs", function (exists) {
  console.log(exists) // true
})

stat
返回一个对象, 包含当前文件或者目录的识别信息, 一般用来判断是文件还是文件夹, 通过 isFile() or isDirectory() 来判断 .

fs.stat("./input.txt", function (err, res) {
  if (err) throw err;
  console.log(res.isFile()) // true
  console.log(res.isDirectory())  // false
})

返回对象的信息如下

PS C:\HiSen\myWorkDemo\node_demo> node .\fs.js
Stats {
  dev: 1279169449,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 1688849861505325,
  size: 0,
  blocks: undefined,
  atimeMs: 1576909108592.982,
  mtimeMs: 1576909108592.982,
  ctimeMs: 1576909108592.982,
  birthtimeMs: 1575876788447.5103,
  atime: 2019-12-21T06:18:28.593Z,
  mtime: 2019-12-21T06:18:28.593Z,
  ctime: 2019-12-21T06:18:28.593Z,
  birthtime: 2019-12-09T07:33:08.448Z }
true
false

还有一些 watchfile(),unwatchfile() 监听文件变化触发的函数和取消监听在这里我就不过多的演示和实践了,大家感兴趣的可以试一试.

发布了20 篇原创文章 · 获赞 40 · 访问量 5865

猜你喜欢

转载自blog.csdn.net/HiSen_CSDN/article/details/103643040