从官网学习Node.js FS模块方法速查
最新文档请查看仓库 https://github.com/wangduandu...
1. File System
- 所有文件操作提供
同步和异步的两种方式,本笔记只记录异步的API - 异步方式其最后一个参数是回调函数。回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能是
null或者undefinded。 - 同步函数可以使用
try catch捕获异常 - 多个异步函数在同一层次执行,是
无法保证顺序的。最好将一个函数放在另一个函数的回调函数中去执行。这种回调的嵌套层次一旦过深,就会造成回调地狱 - 一般情况下,
非常不建议使用同步的fs方法,因为同步的方法会阻断其他事情,直到fs方法完成。
1.1. 文件路径
filepaths目前支持4中
stringBufferURL 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, 而不是stringsorBuffers 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
changecloseerror
- 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
closeopenready第一次触发是在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模块方法速查的更多相关文章
- Node.js FS模块方法速查
1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参数是回调函数.回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能 ...
- 给迷茫的你学习Node.js最好的方法
这是真事儿,在3w咖啡整理书稿,然后小弟梁过来了,聊聊他的现状,一副很不好的样子,在天津我曾带过他大半年,总不能不管,我给他的建议是:“每天看10个npm模块” 对于学习Node.js迷茫的人来说,这 ...
- Node.js——fs模块(文件系统),创建、删除目录(文件),读取写入文件流
/* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs.writeFile 写入文件(文件不存在就创建,但不能创 ...
- Knockout.Js官网学习(系列)
1.Knockout.Js官网学习(简介) 2.Knockout.Js官网学习(监控属性Observables) Knockout.Js官网学习(数组observable) 3.Knockout.Js ...
- 学习node js 之微信公众帐号接口开发 准备工作
绪:因工作须要,近期開始学习Node js,之前隐隐约约听到过node js 但没有实际见到过,仅仅好google了:至于什么是node js,能做些什么,有多么好.或者有哪些弊端我这里就不多说了,由 ...
- Node.js的安装以及Node.js的模块管理
索引: Node.js的安装以及Node.js的模块管理Node.js开发环境搭建以及对ES6的支持Node.js构建Vue.js项目Vue.js单文件组件的开发基于Vue.js的UI组件(Eleme ...
- 【灵魂拷问】你为什么要来学习Node.js呢?
[灵魂拷问]你为什么要来学习Node.js呢? 学习node.js适合的人群: 需要必备一些HTML,CSS,JavaScript及编程有一定程度了解的读者阅读,一些简单的命令行操作,具备服务端开发经 ...
- 使用yarn代替npm作为node.js的模块管理器
使用yarn代替npm作为node.js的模块管理器 转 https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure d ...
- 学习 Node.js 的 6 个步骤
第一步 对于刚接触Node.js的新手来说,第一步无非是打好基础,你需要弄明白以下事情: JavaScript 的特性和语法.假如你对 JavaScript 还不熟悉的话,推荐书籍及链接: JavaS ...
随机推荐
- 窗口大小改变绑定resize事件
当为窗口绑定resize事件时,大部分浏览器会在每改变一个像素就触发一次resize事件.这严重影响了网站的性能. 解决方案是:利用settimeout方法为事件发触发的方法设置延迟执行的时间. 实现 ...
- WEB安全第一篇--对服务器的致命一击:代码与命令注入
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- Egret资源管理解决方案
关于egret开发H5页游,资源管理和加载的一点看法. 一 多json文件管理 二 资源归类和命名 三 exml文件编写规范 四 资源预加载.分步加载.偷载 五 资源文件group分组 六 ResUt ...
- Egret打包App 修改App名称和图标 (Egret4.1.0)
图标替换位置在项目res下的drawable这些目录下,用新图标覆盖即可. 这里我用白色图片替换了白鹭默认的图片ic_launcher.png 修改App名字,在res->value->s ...
- 【BZOJ2300】[HAOI2011]防线修建 set维护凸包
[BZOJ2300][HAOI2011]防线修建 Description 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可 ...
- GOOGLE和百度的长域名
GOOGLE的变态域名:www.mamashuojiusuannizhucedeyumingzaichanggoogledounengsousuochulai.cn/中文拼音:“妈妈说就算你注册的域名 ...
- iOS 单例用法
单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...
- 如何用css给input的placeholder设置颜色
我在做页面的时候遇到过这种情况,在input标签中有默认字,但是设计稿上的颜色和input标签中的placeholder的默认颜色不一致.虽然我们可以在js中写出,但是有点过于麻烦了. 所以我就用cs ...
- 奇怪的Visual Studio 2013停止响应问题
昨天开始遭遇这个问题,今天再次遭遇. 疑似问题发生在写代码的窗口中复制/粘贴时(有待进一步确认触发条件),突然停止响应,出现下面的对话框: 对话框中的文字为: Waiting for a requir ...
- 设计模式之——Chain of Responsibility
Chain of Responsibility模式又叫做责任链模式,是将多个对象组成一条职责链,然后按照职责链上的顺序一个一个的找出是谁来负责处理. 这个模式很简单,下面就是一个实例程序,有六个处理器 ...