摘要:最新文檔請(qǐng)查看倉(cāng)庫(kù)所有文件操作提供同步和異步的兩種方式,本筆記只記錄異步的異步方式其最后一個(gè)參數(shù)是回調(diào)函數(shù)。最好將一個(gè)函數(shù)放在另一個(gè)函數(shù)的回調(diào)函數(shù)中去執(zhí)行。另外回調(diào)函數(shù)中的參數(shù),也是不保證一定存在。
最新文檔請(qǐng)查看倉(cāng)庫(kù) https://github.com/wangduandu...
1. File System所有文件操作提供同步和異步的兩種方式,本筆記只記錄異步的API
異步方式其最后一個(gè)參數(shù)是回調(diào)函數(shù)。回調(diào)函數(shù)的第一個(gè)參數(shù)往往是錯(cuò)誤對(duì)象,如果沒(méi)有發(fā)生參數(shù),那么第一個(gè)參數(shù)可能是null或者undefinded。
同步函數(shù)可以使用try catch 捕獲異常
多個(gè)異步函數(shù)在同一層次執(zhí)行,是無(wú)法保證順序的。最好將一個(gè)函數(shù)放在另一個(gè)函數(shù)的回調(diào)函數(shù)中去執(zhí)行。這種回調(diào)的嵌套層次一旦過(guò)深,就會(huì)造成回調(diào)地獄
一般情況下,非常不建議使用同步的fs方法,因?yàn)橥降姆椒〞?huì)阻斷其他事情,直到fs方法完成。
1.1. 文件路徑
filepaths目前支持4中
string
Buffer
URL Object
以file:開(kāi)頭的協(xié)議
string 路徑會(huì)被解釋為utf-8格式,可以使用相對(duì)路徑和絕對(duì)路徑,相對(duì)路徑是當(dāng)前工作路徑,可以從process.cwd()獲取當(dāng)前工作路徑。
1.2. 文件描述符操作系統(tǒng)會(huì)限制文件描述符的數(shù)量
忘記關(guān)閉文件可能導(dǎo)致內(nèi)存泄露或者程序崩潰
任何文件描述符都支持寫操作
如果文件描述符的類型是文件,那么它不會(huì)自動(dòng)關(guān)閉
寫操作會(huì)從文件的開(kāi)頭,而不會(huì)覆蓋之后的內(nèi)容。舉例:文件內(nèi)容是Hello World, 如果在寫入"Aloha",那么文件的內(nèi)容是Aloha World ,而不是"Aloha".
1.3. 線程池使用fs所有的api,除了那些同步的api和fs.FSWatcher(), 基本上都使用libuv的線程池。在有些應(yīng)用程序上,這個(gè)可能導(dǎo)致非常糟糕的性能表現(xiàn)。libuv的線程池有固定的大小,默認(rèn)只有4個(gè),可以通過(guò)設(shè)置環(huán)境變量UV_THREADPOOL_SIZE去增加libuv的線程的數(shù)量。
1.4. Class: fs.Dirent 判斷文件類型當(dāng)fs.readdir()或者fs.readdirSync()被調(diào)用,并且參數(shù)withFileTypes是true, 那么返回結(jié)果就是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 文件變動(dòng)監(jiān)控來(lái)自 fs.watch()
Event
change
close
error
watcher.close()
注意:某些系統(tǒng)可能不會(huì)返回filename。如果encoding參數(shù)是buffer,那么文件名是以buffer的形式返回,默認(rèn)文件名是utf-8格式的字符串。
fs.watch("./tmp", { encoding: "buffer" }, (eventType, filename) => { if (filename) { console.log(filename); // Prints:1.6. Class: fs.ReadStream 可讀流} });
來(lái)自fs.createReadStream()
Event
close
open
ready 第一次觸發(fā)是在open事件之后
readStream.bytesRead
readStream.path
readStream.pending
1.7. Class: fs.Stats 獲取文件信息來(lái)自 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. 常用方法測(cè)試
訪問(wèn)權(quán)限測(cè)試 fs.access(path[, mode], callback) 測(cè)試是否可以訪問(wèn)某個(gè)路徑。不建議fs.open(), fs.readFile() or fs.writeFile()調(diào)用前,調(diào)用fs.access去檢查
測(cè)試路徑是否存在 fs.exists(path, callback), 不建議fs.open(), fs.readFile() or fs.writeFile()調(diào)用前,調(diào)用fs.exists去檢測(cè)文件是否存在
流操作
創(chuàng)建可讀流 fs.createReadStream(path[, options])
創(chuàng)建可寫流 fs.createWriteStream(path[, options])
文件夾操作
創(chuàng)建文件夾 fs.mkdir(path[, options], callback)
刪除目錄 fs.rmdir(path, callback)
創(chuàng)建臨時(shí)文件夾 fs.mkdtemp(prefix[, options], callback)
讀取文件夾 fs.readdir(path[, options], callback)
文件操作
打開(kāi)文件 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)
停止監(jiān)控文件 fs.unwatchFile(filename[, listener])
修改時(shí)間 fs.utimes(path, atime, mtime, callback)
監(jiān)控文件變化 fs.watch(filename, options)
關(guān)閉文件 fs.close(fd, callback)
追加文件 fs.appendFile(path, data[, options], callback)
改變文件模式 fs.chmod(path, mode, callback)
改變文件所屬 fs.chown(path, uid, gid, callback)
復(fù)制文件 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
注意事項(xiàng)
fs.watch并不是百分百跨平臺(tái)。例如它的recursive參數(shù)僅支持macOS和windows。fs.watch的底層通知機(jī)制在不同平臺(tái)上的實(shí)現(xiàn)是不同的,如果底層不支持某個(gè)特性,那么fs.watch也是不能支持的。另外回調(diào)函數(shù)中的filename參數(shù),也是不保證一定存在。
fs.watch()比fs.watchFile()更高效,可能的話,盡量使用前者。
3. 參考Node.js fs
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99983.html
摘要:既然這樣,怎么理解中的單線程再捋一捋和的關(guān)系。在線程上,不會(huì)等待操作完成,繼續(xù)執(zhí)行后續(xù)的代碼。這就是單線程異步。在中除了代碼,一切都是并行的由于中主任務(wù)的執(zhí)行是以單線程的方式進(jìn)行,如果程序出錯(cuò)導(dǎo)致崩潰,就會(huì)終止整個(gè)流程。 node是什么 Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。 Node.js 使用了一個(gè)事件驅(qū)動(dòng)、非阻塞式 I/O 的模...
摘要:表示當(dāng)前正在執(zhí)行的腳本的文件名。默認(rèn)編碼為模式為,為回調(diào)函數(shù),回調(diào)函數(shù)只包含錯(cuò)誤信息參數(shù),在寫入失敗時(shí)返回。參數(shù)使用說(shuō)明如下通過(guò)方法返回的文件描述符。 Node.js回調(diào) Node.js異步編程的直接體現(xiàn)就是回調(diào)。 阻塞代碼: const fs = require(fs); let data = fs.readFileSync(input.txt); console.log(data...
摘要:是一種設(shè)計(jì)用于關(guān)系型數(shù)據(jù)庫(kù)的查詢語(yǔ)言。另一方面,數(shù)據(jù)庫(kù)在最近十年變得相當(dāng)流行。大多數(shù)數(shù)據(jù)庫(kù)都有驅(qū)動(dòng)程序可以用,它們?cè)谏弦灿袔?kù)。我們已經(jīng)完成了在中使用數(shù)據(jù)庫(kù)所必須知道的所有基礎(chǔ)知識(shí)。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1751原文:https://blog.risingstack.com/node-js-database-t...
摘要:入門你必須知道的那些事最基本的一些操作和概念用執(zhí)行一段代碼在命令行中用切換到桌面創(chuàng)建一個(gè)文件夾和并用命令切換到這個(gè)文件夾創(chuàng)建一個(gè)文件并寫上簡(jiǎn)單的代碼在命令行中輸入命令行會(huì)輸出引用文件的方式采用了規(guī)范通過(guò)來(lái)引入一個(gè)文件新建文件并在文件中引入執(zhí) 入門node.js你必須知道的那些事 最基本的一些操作和概念 用node執(zhí)行一段js代碼 在命令行中用cd切換到桌面 創(chuàng)建一個(gè)文件夾和并用cd命...
摘要:這個(gè)速查表主要是分享互聯(lián)網(wǎng)上一些比較常用的工具和技術(shù)常用內(nèi)容,如編輯器的快捷鍵的命令行的選擇器的屬性等,這個(gè)列表簡(jiǎn)單收集了常用的工具,可以收藏用于平時(shí)的備忘錄,需要用到的時(shí)候可以及時(shí)查閱。 這個(gè)速查表主要是分享互聯(lián)網(wǎng)上一些比較常用的工具和技術(shù)常用內(nèi)容,如編輯器的快捷鍵、git的命令行、jQuery的API選擇器、CSS的flexbox屬性等,這個(gè)列表簡(jiǎn)單收集了常用的工具,可以收藏用于平...
閱讀 2607·2021-10-14 09:43
閱讀 3566·2021-10-13 09:39
閱讀 3299·2019-08-30 15:44
閱讀 3150·2019-08-29 16:37
閱讀 3714·2019-08-29 13:17
閱讀 2740·2019-08-26 13:57
閱讀 1832·2019-08-26 11:59
閱讀 1253·2019-08-26 11:46