资讯专栏INFORMATION COLUMN

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

jsummer / 1063人阅读

摘要:最新文档请查看仓库所有文件操作提供同步和异步的两种方式,本笔记只记录异步的异步方式其最后一个参数是回调函数。最好将一个函数放在另一个函数的回调函数中去执行。另外回调函数中的参数,也是不保证一定存在。

最新文档请查看仓库 https://github.com/wangduandu...

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()被调用,并且参数withFileTypestrue, 那么返回结果就是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: 
  }
});
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. 参考

Node.js fs

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99983.html

相关文章

  • Node 基础学习

    摘要:既然这样,怎么理解中的单线程再捋一捋和的关系。在线程上,不会等待操作完成,继续执行后续的代码。这就是单线程异步。在中除了代码,一切都是并行的由于中主任务的执行是以单线程的方式进行,如果程序出错导致崩溃,就会终止整个流程。 node是什么 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模...

    alaege 评论0 收藏0
  • Node.js学习总结

    摘要:表示当前正在执行的脚本的文件名。默认编码为模式为,为回调函数,回调函数只包含错误信息参数,在写入失败时返回。参数使用说明如下通过方法返回的文件描述符。 Node.js回调 Node.js异步编程的直接体现就是回调。 阻塞代码: const fs = require(fs); let data = fs.readFileSync(input.txt); console.log(data...

    kamushin233 评论0 收藏0
  • Node Hero】5. Node.js 数据库教程

    摘要:是一种设计用于关系型数据库的查询语言。另一方面,数据库在最近十年变得相当流行。大多数数据库都有驱动程序可以用,它们在上也有库。我们已经完成了在中使用数据库所必须知道的所有基础知识。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1751原文:https://blog.risingstack.com/node-js-database-t...

    Hujiawei 评论0 收藏0
  • 入门node.js你必须知道的那些事

    摘要:入门你必须知道的那些事最基本的一些操作和概念用执行一段代码在命令行中用切换到桌面创建一个文件夹和并用命令切换到这个文件夹创建一个文件并写上简单的代码在命令行中输入命令行会输出引用文件的方式采用了规范通过来引入一个文件新建文件并在文件中引入执 入门node.js你必须知道的那些事 最基本的一些操作和概念 用node执行一段js代码 在命令行中用cd切换到桌面 创建一个文件夹和并用cd命...

    learn_shifeng 评论0 收藏0
  • 前端速查表大全,分享一些技术和工具的简明教程

    摘要:这个速查表主要是分享互联网上一些比较常用的工具和技术常用内容,如编辑器的快捷键的命令行的选择器的属性等,这个列表简单收集了常用的工具,可以收藏用于平时的备忘录,需要用到的时候可以及时查阅。 这个速查表主要是分享互联网上一些比较常用的工具和技术常用内容,如编辑器的快捷键、git的命令行、jQuery的API选择器、CSS的flexbox属性等,这个列表简单收集了常用的工具,可以收藏用于平...

    xiaochao 评论0 收藏0

发表评论

0条评论

jsummer

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<