1. File System

  • 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API
  • 异步方式其最后一个参数是回调函数。回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能是null或者undefinded。
  • 同步函数可以使用try catch 捕获异常
  • 多个异步函数在同一层次执行,是无法保证顺序的。最好将一个函数放在另一个函数的回调函数中去执行。这种回调的嵌套层次一旦过深,就会造成回调地狱
  • 一般情况下,非常不建议使用同步的fs方法,因为同步的方法会阻断其他事情,直到fs方法完成。

1.1. 文件路径

  • filepaths目前支持4中

    • string
    • Buffer
    • URL Object
    • 以file:开头的协议
  • string 路径会被解释为utf-8格式,可以使用相对路径和绝对路径,相对路径是当前工作路径,可以从process.cwd()获取当前工作路径。

1.2. 文件描述符

  • 操作系统会限制文件描述符的数量
  • 忘记关闭文件可能导致内存泄露或者程序崩溃
  • 任何文件描述符都支持写操作
  • 如果文件描述符的类型是文件,那么它不会自动关闭
  • 写操作会从文件的开头,而不会覆盖之后的内容。举例:文件内容是Hello World, 如果在写入'Aloha',那么文件的内容是Aloha World ,而不是'Aloha'.

1.3. 线程池使用

fs所有的api,除了那些同步的api和fs.FSWatcher(), 基本上都使用libuv的线程池。在有些应用程序上,这个可能导致非常糟糕的性能表现。libuv的线程池有固定的大小,默认只有4个,可以通过设置环境变量UV_THREADPOOL_SIZE去增加libuv的线程的数量。

1.4. Class: fs.Dirent 判断文件类型

  • 当fs.readdir()或者fs.readdirSync()被调用,并且参数withFileTypes是true, 那么返回结果就是fs.Dirent objects, 而不是strings or Buffers
  • dirent方法

    • dirent.isBlockDevice()
    • dirent.isCharacterDevice()
    • dirent.isDirectory()
    • dirent.isFIFO()
    • dirent.isFile()
    • dirent.isSocket()
    • dirent.isSymbolicLink()
    • dirent.name

1.5. Class: fs.FSWatcher 文件变动监控

来自 fs.watch()

  • Event

    • change
    • close
    • error
  • watcher.close()

注意:某些系统可能不会返回filename。如果encoding参数是buffer,那么文件名是以buffer的形式返回,默认文件名是utf-8格式的字符串。


fs.watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
if (filename) {
console.log(filename);
// Prints: <Buffer ...>
}
});

1.6. Class: fs.ReadStream 可读流

来自fs.createReadStream()

  • Event

    • close
    • open
    • ready 第一次触发是在open事件之后
  • readStream.bytesRead
  • readStream.path
  • readStream.pending

1.7. Class: fs.Stats 获取文件信息

来自 fs.stat(), fs.lstat() and fs.fstat() 以及他们的同步版本。

  • stats.isBlockDevice()
  • stats.isCharacterDevice()
  • stats.isDirectory()
  • stats.isFIFO()
  • stats.isFile()
  • stats.isSocket()
  • stats.isSymbolicLink()

Stats {
dev: 2114,
ino: 48064969,
mode: 33188,
nlink: 1,
uid: 85,
gid: 100,
rdev: 0,
size: 527,
blksize: 4096,
blocks: 8,
atimeMs: 1318289051000.1,
mtimeMs: 1318289051000.1,
ctimeMs: 1318289051000.1,
birthtimeMs: 1318289051000.1,
atime: Mon, 10 Oct 2011 23:24:11 GMT,
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
ctime: Mon, 10 Oct 2011 23:24:11 GMT,
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }

1.8. Class: fs.WriteStream 可写流

  • Event

    • close
    • open
    • ready
  • writeStream.bytesWritten
  • writeStream.path
  • writeStream.pending

2. 常用方法

  • 测试

    • 访问权限测试 fs.access(path[, mode], callback) 测试是否可以访问某个路径。不建议fs.open(), fs.readFile() or fs.writeFile()调用前,调用fs.access去检查
    • 测试路径是否存在 fs.exists(path, callback), 不建议fs.open(), fs.readFile() or fs.writeFile()调用前,调用fs.exists去检测文件是否存在
  • 流操作

    • 创建可读流 fs.createReadStream(path[, options])
    • 创建可写流 fs.createWriteStream(path[, options])
  • 文件夹操作

    • 创建文件夹 fs.mkdir(path[, options], callback)
    • 删除目录 fs.rmdir(path, callback)
    • 创建临时文件夹 fs.mkdtemp(prefix[, options], callback)
    • 读取文件夹 fs.readdir(path[, options], callback)
  • 文件操作

    • 打开文件 fs.open(path[, flags[, mode]], callback)
    • 读取文件 fs.read(fd, buffer, offset, length, position, callback)
    • 读取文件 fs.readFile(path[, options], callback)
    • 重命名文件 fs.rename(oldPath, newPath, callback)
    • 读取文件信息 fs.stat(path[, options], callback)
    • 删除文件 fs.unlink(path, callback)
    • 停止监控文件 fs.unwatchFile(filename[, listener])
    • 修改时间 fs.utimes(path, atime, mtime, callback)
    • 监控文件变化 fs.watch(filename, options)
    • 关闭文件 fs.close(fd, callback)
    • 追加文件 fs.appendFile(path, data[, options], callback)
    • 改变文件模式 fs.chmod(path, mode, callback)
    • 改变文件所属 fs.chown(path, uid, gid, callback)
    • 复制文件 fs.copyFile(fs.copyFile(src, dest[, flags], callback))
    • 写文件 fs.write(fd, buffer[, offset[, length[, position]]], callback)
    • 写文件 fs.write(fd, string[, position[, encoding]], callback)
    • 写文件 fs.writeFile(file, data[, options], callback)
  • 其他

    • fs常量 fs.constants
  • 注意事项

    • fs.watch并不是百分百跨平台。例如它的recursive参数仅支持macOS和windows。fs.watch的底层通知机制在不同平台上的实现是不同的,如果底层不支持某个特性,那么fs.watch也是不能支持的。另外回调函数中的filename参数,也是不保证一定存在。
    • fs.watch()比fs.watchFile()更高效,可能的话,尽量使用前者。

3. 参考

原文地址:https://segmentfault.com/a/1190000017359113

Node.js FS模块方法速查的更多相关文章

  1. 从官网学习Node.js FS模块方法速查

    最新文档请查看仓库 https://github.com/wangduandu... 1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参 ...

  2. Node.js——fs模块(文件系统),创建、删除目录(文件),读取写入文件流

    /* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs.writeFile 写入文件(文件不存在就创建,但不能创 ...

  3. Node.js的安装以及Node.js的模块管理

    索引: Node.js的安装以及Node.js的模块管理Node.js开发环境搭建以及对ES6的支持Node.js构建Vue.js项目Vue.js单文件组件的开发基于Vue.js的UI组件(Eleme ...

  4. [Nodejs] node的fs模块

    fs 模块 Node.js 提供一组类似 UNIX(POSIX)标准的文件操作 API. Node 导入文件系统模块(fs).Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如 ...

  5. 【node】fs模块,文件和目录的操作

    检查文件是否存在,查询文件信息 fs.stat() fs.stat('./server.js', function (err, stat) { if (stat && stat.isF ...

  6. Node.js:模块系统、函数

    为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块, ...

  7. Node.js:模块系统

    ylbtech-Node.js:模块系统 1.返回顶部 1. Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的 ...

  8. Node.js之模块机制

    > 文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. ![file](https://img2018.cnblogs.com/blog/830272/20 ...

  9. Node.js核心模块-http

    通过node中的http模块可以创建编写服务器 引入 const http = require('http') http举例使用: const http = require('http') //引入 ...

随机推荐

  1. 论文阅读:OpenFlow: Enabling Innovation in Campus Networks

    摘要: 本白皮书提出了OpenFlow——研究人员在他们每天使用的网络中运行实验协议的一种方式. OpenFlow基于以太网交换机,具有内部流表以及用于添加和删除流条目的标准化接口.我们的目标是鼓励网 ...

  2. HDU6579 Operation

    题目链接 问题分析 区间求异或和最大,比较自然的想到了线性基.而每次求一个区间的线性基显然是行不通的.我们考虑在每个位置求出首位置到当前位置的线性基.同时我们要使线性基中高位的位置所选的数尽量靠后.这 ...

  3. JIRA7.13版本创建项目:字段和界面(三)

    这是我从网上找的资料和最新版的相差不大,可以借鉴原文链接:http://ju.outofmemory.cn/entry/367224 项目的版本号取决于修复版本,不是影响版本 字段 我们已经知道如何在 ...

  4. LibreOJ NOI Round #2 Day 1

    LibreOJ NOI Round #2 Day 1 T1: 别被定义弄晕了 反着做,A->1/A+B 取倒数没法做,所以变成a/b,维护2*2的矩阵 区间?不用线段树,不用倍增 存在逆矩阵,直 ...

  5. 分布式-信息方式-ActiveMQ的Destination高级特性1

    ActiveMQ的Destination高级特性 Destination高级特性----->Composite Destinations 组合队列Composite Destinations : ...

  6. Golang Singleton

    package example import ( "fmt" "sync") var m *singletonvar once sync.Once func G ...

  7. C++入门经典-例4.4-循环嵌套之求n的阶乘

    1:代码如下: // 4.4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  8. SQL 表 数据备份

    insert into SMTTemporarySave select * from [MSV0CIMDB].[PICS_20170706].dbo.SMTTemporarySave

  9. [论文理解] Receptive Field Block Net for Accurate and Fast Object Detection

    Receptive Field Block Net for Accurate and Fast Object Detection 简介 本文在SSD基础上提出了RFB Module,利用神经科学的先验 ...

  10. python threading.current_thread().name和.getName()有什么区别

    今天学到python多线程这块,想显示当前线程是主线程还是子线程.网上一搜,有个方法叫 threading.current().name 定海偶然 但是发现,同样的threading.current_ ...