最新文档请检察堆栈 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()
被挪用,而且参数withFileTypes
是true
, 那末返回效果就是fs.Dirent objects
, 而不是strings
orBuffers
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()
更高效,能够的话,只管运用前者。
-