Module 基礎模塊

模塊fs

文件系統處理模塊

使用方法:

1
var fs = require('fs');

一些注意點:

  • 運行 fs.watch(filename)EventEmitter 的watcher, 它支持'change', 'changeonly', 'renameonly' 三個事件
  • fs.watchFile(target)fs.unwatchFile(target)
  • fs.watchFile(target) 會返回一個繼承自 EventEmitterStatsWatcher對象, 調用 fs.unwatchFile(target)StatsWatcher.close()
  • 因為uv 在Linux 上的實現,fs.watchrecursivefs.watch('/[path](path.md)/to', { recursive: true }, handler)handler

對象

constants

fs模塊的常量對象

1
fs_constants fs.constants;

靜態函數

exists

查詢指定的文件或目錄是否存在

1
static Boolean fs.exists(String path) async;

調用參數:

  • path: String, 指定要查詢的路徑

返回結果:

  • Boolean, 返回True 表示文件或目錄存在

access

查詢用戶對指定的文件的權限

1 2
static fs.access(String path, Integer mode = 0) async;

調用參數:

  • path: String, 指定要查詢的路徑
  • mode: Integer, 指定查詢的權限,默認為文件是否存在

創建硬鏈接文件, windows 下不支持此方法

1 2
static fs.link(String oldPath, String newPath) async;

調用參數:

  • oldPath: String, 源文件
  • newPath: String, 將要被創建的文件

刪除指定的文件

1
static fs.unlink(String path) async;

調用參數:

  • path: String, 指定要刪除的路徑

mkdir

創建一個目錄

1 2
static fs.mkdir(String path, Integer mode = 0777) async;

調用參數:

  • path: String, 指定要創建的目錄名
  • mode: Integer, 指定文件權限,Windows 忽略此參數,默認值: 0777

創建一個目錄

1 2
static fs.mkdir(String path, Object opt) async;

調用參數:

  • path: String, 指定要創建的目錄名
  • opt: Object, 指定創建參數

創建參數可以包含以下值:

1 2 3 4
{ recursive: false, // 指定是否父目录不存在是是否自动创建,默认值: false mode: 0777 // 指定文件权限,Windows 忽略此参数,默认值: 0777 }

rmdir

刪除一個目錄

1
static fs.rmdir(String path) async;

調用參數:

  • path: String, 指定要刪除的目錄名

rename

重新命名一個文件

1 2
static fs.rename(String from, String to) async;

調用參數:

  • from: String, 指定更名的文件
  • to: String, 指定要修改的新文件名

copyFile

將src 拷貝到dest。默認情況下,如果dest 已經存在,則覆蓋它。

1 2 3
static fs.copyFile(String from, String to, Integer mode = 0) async;

調用參數:

  • from: String, 指定要拷貝的源文件名
  • to: String, 指定要拷貝的目標文件名
  • mode: Integer, 指定拷貝操作的修飾符,缺省為 0

mode 是一個可選的整數,指定拷貝操作的行為。可以創建由兩個或更多個值按位或組成的掩碼(比如fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE)。

  • fs.constants.COPYFILE_EXCL - 如果dest 已存在,則拷貝操作將失敗。
  • fs.constants.COPYFILE_FICLONE - 拷貝操作將嘗試創建寫時拷貝(copy-on-write)鏈接。如果平台不支持寫時拷貝,則使用後備的拷貝機制。
  • fs.constants.COPYFILE_FICLONE_FORCE - 拷貝操作將嘗試創建寫時拷貝鏈接。如果平台不支持寫時拷貝,則拷貝操作將失敗。

chmod

設置指定文件的訪問權限,Windows 不支持此方法

1 2
static fs.chmod(String path, Integer mode) async;

調用參數:

  • path: String, 指定操作的文件
  • mode: Integer, 指定設定的訪問權限

lchmod

設置指定文件的訪問權限,若文件是軟連接則不改變指向文件的權限,只在macOS、BSD 系列平台上可用

1 2
static fs.lchmod(String path, Integer mode) async;

調用參數:

  • path: String, 指定操作的文件
  • mode: Integer, 指定設定的訪問權限

chown

設置指定文件的擁有者,Windows 不支持此方法

1 2 3
static fs.chown(String path, Integer uid, Integer gid) async;

調用參數:

  • path: String, 指定設置的文件
  • uid: Integer, 文件擁有者用戶id
  • gid: Integer, 文件擁有者組id

lchown

設置指定文件的擁有者,如果指定的文件是軟連接則不會改變其指向文件的擁有者,Windows 不支持此方法

1 2 3
static fs.lchown(String path, Integer uid, Integer gid) async;

調用參數:

  • path: String, 指定設置的文件
  • uid: Integer, 文件擁有者用戶id
  • gid: Integer, 文件擁有者組id

stat

查詢指定文件的基礎信息

1
static Stat fs.stat(String path) async;

調用參數:

  • path: String, 指定查詢的文件

返回結果:

  • Stat, 返回文件的基礎信息

lstat

查詢指定文件的基礎信息, 和stat不同的是, 當path是一個軟連接的時候,返回的將是這個軟連接的信息而不是指向的文件的信息

1
static Stat fs.lstat(String path) async;

調用參數:

  • path: String, 指定查詢的文件

返回結果:

  • Stat, 返回文件的基礎信息

讀取指定的軟連接文件, windows 下不支持此方法

1
static String fs.readlink(String path) async;

調用參數:

  • path: String, 指定讀取的軟連接文件

返回結果:

  • String, 返回軟連接指向的文件名

realpath

返回指定路徑的絕對路徑,如果指定路徑中包含相對路徑也會被展開

1
static String fs.realpath(String path) async;

調用參數:

  • path: String, 指定讀取的路徑

返回結果:

  • String, 返回處理後的絕對路徑

創建軟連接文件

1 2 3
static fs.symlink(String target, String linkpath, String type = "file") async;

調用參數:

  • target: String, 目標文件,可以是文件、目錄、或不存在的路徑
  • linkpath: String, 將被創建的軟連接文件
  • type: String, 創建的軟連接類型, 可選類型為'file', 'dir', 'junction', 默認為'file', 該參數只在windows上有效,當為'junction'的時候將要創建的目標路徑linkpath必須為絕對路徑, 而target則會被自動轉化為絕對路徑。

truncate

修改文件尺寸,如果指定的長度大於源文件大小則用'\0'填充,否則多於的文件內容將丟失

1 2
static fs.truncate(String path, Integer len) async;

調用參數:

  • path: String, 指定被修改文件的路徑
  • len: Integer, 指定修改後文件的大小

read

根據文件描述符,讀取文件內容

1 2 3 4 5
static Integer fs.read(Integer fd, Buffer buffer, Integer offset = 0, Integer length = 0, Integer position = -1) async;

調用參數:

  • fd: Integer, 文件描述符
  • buffer: Buffer, 讀取結果寫入的 Buffer 對象
  • offset: Integer, Buffer 寫入偏移量, 默認為 0
  • length: Integer, 文件讀取字節數,默認為 0
  • position: Integer, 文件讀取位置,默認為當前文件位置

返回結果:

  • Integer, 實際讀取的字節數

fchmod

根據文件描述符,改變文件模式。只在POSIX 系統有效。

1 2
static fs.fchmod(Integer fd, Integer mode) async;

調用參數:

  • fd: Integer, 文件描述符
  • mode: Integer, 文件的模式

fchown

根據文件描述符,改變所有者。只在POSIX 系統有效。

1 2 3
static fs.fchown(Integer fd, Integer uid, Integer gid) async;

調用參數:

  • fd: Integer, 文件描述符
  • uid: Integer, 用戶id
  • gid: Integer, 組id

fdatasync

根據文件描述符,同步數據到磁盤

1
static fs.fdatasync(Integer fd) async;

調用參數:

  • fd: Integer, 文件描述符

fsync

根據文件描述符,同步數據到磁盤

1
static fs.fsync(Integer fd) async;

調用參數:

  • fd: Integer, 文件描述符

readdir

讀取指定目錄的文件信息

1
static NArray fs.readdir(String path) async;

調用參數:

  • path: String, 指定查詢的目錄

返回結果:

  • NArray, 返回目錄的文件信息數組

openFile

打開文件,用於讀取,寫入,或者同時讀寫

1 2
static SeekableStream fs.openFile(String fname, String flags = "r") async;

調用參數:

  • fname: String, 指定文件名
  • flags: String, 指定文件打開方式,缺省為"r",只讀方式

返回結果:

參數flags 支持的方式如下:

  • 'r' 只讀方式,文件不存在則拋出錯誤。
  • 'r+' 讀寫方式,文件不存在則拋出錯誤。
  • 'w' 只寫方式,文件不存在則自動創建,存在則將被清空。
  • 'w+' 讀寫方式,文件不存在則自動創建。
  • 'a' 只寫添加方式,文件不存在則自動創建。
  • 'a+' 讀寫添加方式,文件不存在則自動創建。

open

打開文件描述符

1 2 3
static Integer fs.open(String fname, String flags = "r", Integer mode = 0666) async;

調用參數:

  • fname: String, 指定文件名
  • flags: String, 指定文件打開方式,缺省為"r",只讀方式
  • mode: Integer, 當創建文件的時候,指定文件的模式,默認0666

返回結果:

  • Integer, 返回打開的文件描述符

參數flags 支持的方式如下:

  • 'r' 只讀方式,文件不存在則拋出錯誤。
  • 'r+' 讀寫方式,文件不存在則拋出錯誤。
  • 'w' 只寫方式,文件不存在則自動創建,存在則將被清空。
  • 'w+' 讀寫方式,文件不存在則自動創建。
  • 'a' 只寫添加方式,文件不存在則自動創建。
  • 'a+' 讀寫添加方式,文件不存在則自動創建。

close

關閉文件描述符

1
static fs.close(Integer fd) async;

調用參數:

  • fd: Integer, 文件描述符

openTextStream

打開文本文件,用於讀取,寫入,或者同時讀寫

1 2
static BufferedStream fs.openTextStream(String fname, String flags = "r") async;

調用參數:

  • fname: String, 指定文件名
  • flags: String, 指定文件打開方式,缺省為"r",只讀方式

返回結果:

參數flags 支持的方式如下:

  • 'r' 只讀方式,文件不存在則拋出錯誤。
  • 'r+' 讀寫方式,文件不存在則拋出錯誤。
  • 'w' 只寫方式,文件不存在則自動創建,存在則將被清空。
  • 'w+' 讀寫方式,文件不存在則自動創建。
  • 'a' 只寫添加方式,文件不存在則自動創建。
  • 'a+' 讀寫添加方式,文件不存在則自動創建。

readTextFile

打開文本文件,並讀取內容

1
static String fs.readTextFile(String fname) async;

調用參數:

  • fname: String, 指定文件名

返回結果:

  • String, 返回文件文本內容

readFile

打開二進製文件,並讀取內容

1 2
static Variant fs.readFile(String fname, String encoding = "") async;

調用參數:

  • fname: String, 指定文件名
  • encoding: String, 指定解碼方式,缺省不解碼

返回結果:

  • Variant, 返回文件文本內容

readLines

打開文件,以數組方式讀取一組文本行,行結尾標識基於EOL 屬性的設置,缺省時,posix:"\n";windows:"\r\n"

1 2
static Array fs.readLines(String fname, Integer maxlines = -1);

調用參數:

  • fname: String, 指定文件名
  • maxlines: Integer, 指定此次讀取的最大行數,缺省讀取全部文本行

返回結果:

  • Array, 返回讀取的文本行數組,若無數據可讀,或者連接中斷,空數組

writeTextFile

創建文本文件,並寫入內容

1 2
static fs.writeTextFile(String fname, String txt) async;

調用參數:

  • fname: String, 指定文件名
  • txt: String, 指定要寫入的字符串

writeFile

創建二進製文件,並寫入內容

1 2
static fs.writeFile(String fname, Buffer data) async;

調用參數:

  • fname: String, 指定文件名
  • data: Buffer, 指定要寫入的二進制數據

appendFile

創建二進製文件,並寫入內容

1 2
static fs.appendFile(String fname, Buffer data) async;

調用參數:

  • fname: String, 指定文件名
  • data: Buffer, 指定要寫入的二進制數據

setZipFS

設置 zip 虛擬文件映射

1 2
static fs.setZipFS(String fname, Buffer data);

調用參數:

  • fname: String, 指定映射路徑
  • data: Buffer, 指定映射的 zip 文件數據

clearZipFS

清除 zip 虛擬文件映射

1
static fs.clearZipFS(String fname = "");

調用參數:

  • fname: String, 指定映射路徑,缺省清除全部緩存

watch

觀察一個文件, 返回對應的watcher 對象

1
static FSWatcher fs.watch(String fname);

調用參數:

  • fname: String, 指定要觀察的文件對象

返回結果:


觀察一個文件, 返回對應的watcher 對象

1 2
static FSWatcher fs.watch(String fname, Function callback);

調用參數:

  • fname: String, 指定要觀察的文件對象
  • callback: Function,(evtType: 'change' | 'rename', filename: string) => any

返回結果:


觀察一個文件, 返回對應的watcher 對象

1 2
static FSWatcher fs.watch(String fname, Object options);

調用參數:

  • fname: String, 指定要觀察的文件對象
  • options: Object, 觀察選項

返回結果:

options 支持的選項如下:

1 2 3 4 5
{ "persistent": true, // {boolean} default: true 是否只要目标文件还在被观察, 进程就不退出 "recursive": false, // {boolean} default: false 对于 fname 为文件夹的情况, 是否递归地观察其下所有的子目录 "encoding": "utf8", // {enum} default: 'utf8' 指定解析传入的 fname 的字符编码 }

觀察一個文件, 返回對應的watcher 對象

1 2 3
static FSWatcher fs.watch(String fname, Object options, Function callback);

調用參數:

  • fname: String, 指定要觀察的文件對象
  • options: Object, 觀察選項
  • callback: Function,(evtType: 'change' | 'rename', filename: string) => any

返回結果:

options 支持的選項如下:

1 2 3 4 5
{ "persistent": true, // {boolean} default: true 是否只要目标文件还在被观察, 进程就不退出 "recursive": false, // {boolean} default: false 对于 fname 为文件夹的情况, 是否递归地观察其下所有的子目录 "encoding": "utf8", // {enum} default: 'utf8' 指定解析传入的 fname 的字符编码 }

watchFile

觀察一個文件, 返回對應的 StatsWatcher 對象

1 2
static StatsWatcher fs.watchFile(String fname, Function callback);

調用參數:

  • fname: String, 指定要觀察的文件對象
  • callback: Function,(curStats: Stats, prevStats: Stats) => any

返回結果:


觀察一個文件, 返回對應的 StatsWatcher 對象

1 2 3
static StatsWatcher fs.watchFile(String fname, Object options, Function callback);

調用參數:

  • fname: String, 指定要觀察的文件對象
  • options: Object, 觀察選項
  • callback: Function,(curStats: Stats, prevStats: Stats) => any

返回結果:

options 支持的選項如下:

1 2 3 4 5
{ "persistent": true, // {boolean} default: true 是否只要目标文件还在被观察, 进程就不退出 "recursive": false, // {boolean} default: false 对于 fname 为文件夹的情况, 是否递归地观察其下所有的子目录 "encoding": "utf8", // {enum} default: 'utf8' 指定解析传入的 fname 的字符编码 }

unwatchFile

從觀察fname 的 StatsWatcher 中移除所有觀察事件的回調

1
static fs.unwatchFile(String fname);

調用參數:

  • fname: String, 指定要觀察的文件對象

返回結果:


從觀察fname 的 StatsWatcher的觀察事件回調中移除 callback

1 2
static fs.unwatchFile(String fname, Function callback);

調用參數:

  • fname: String, 指定要觀察的文件對象
  • callback: Function, 要移除的回調

返回結果:

即便callback 不再 StatsWatcher 的觀察事件回調中也不會報錯

常量

SEEK_SET

seek 方式常量,移動到絕對位置

1
const fs.SEEK_SET = 0;

SEEK_CUR

seek 方式常量,移動到當前位置的相對位置

1
const fs.SEEK_CUR = 1;

SEEK_END

seek 方式常量,移動到文件結尾的相對位置

1
const fs.SEEK_END = 2;