Node.js 檔案系統
Node.js 提供一組類似 UNIX(POSIX)標準的檔案操作API。 Node 導入檔案系統模組(fs)語法如下所示:
var fs = require("fs")
非同步與同步
Node.js 檔案系統(fs 模組)模組中的方法都有非同步且同步版本,例如讀取檔案內容的函數有非同步的fs.readFile() 和同步的fs.readFileSync()。
非同步的方法函數最後一個參數為回呼函數,回呼函數的第一個參數包含了錯誤訊息(error)。
建議大家是用非同步方法,比起同步,非同步方法效能更高,速度更快,而且沒有阻塞。
實例
建立input.txt 文件,內容如下:
php中文网官网地址:www.php.cn 文件读取实例
建立file.js 檔案, 程式碼如下:
var fs = require("fs"); // 异步读取 fs.readFile('input.txt', function (err, data) { if (err) { return console.error(err); } console.log("异步读取: " + data.toString()); }); // 同步读取 var data = fs.readFileSync('input.txt'); console.log("同步读取: " + data.toString()); console.log("程序执行完毕。");
以上程式碼執行結果如下:
$ node file.js 同步读取: php中文网官网地址:www.php.cn 文件读取实例 程序执行完毕。 异步读取: php中文网官网地址:www.php.cn 文件读取实例
接下來,讓我們來具體了解下Node.js 檔案系統的方法。
開啟檔案
語法
以下為在非同步模式下開啟檔案的語法格式:
fs.open(path, flags[, mode], callback)
參數
參數使用說明如下:
path - 檔案的路徑。
flags - 檔案開啟的行為。具體數值詳見下文。
mode - 設定檔案模式(權限),檔案建立預設權限為 0666(可讀,可寫)。
callback - 回呼函數,有兩個參數如:callback(err, fd)。
flags 參數可以是下列值:
Flag | ##描述|
---|---|
以讀取模式開啟檔案。如果檔案不存在拋出異常。 | |
以讀寫模式開啟檔案。如果檔案不存在拋出異常。 | |
以同步的方式讀取檔案。 | |
以同步的方式讀取和寫入檔案。 | |
以寫入模式開啟文件,如果文件不存在則建立。 | |
類似 'w',但是如果檔案路徑存在,則檔案寫入失敗。 | |
以讀寫模式開啟文件,如果文件不存在則建立。 | |
類似 'w+', 但是如果檔案路徑存在,則檔案讀寫失敗。 | |
以追加模式開啟文件,如果文件不存在則建立。 |
實例
接下來我們建立file.js 文件,並開啟input.txt 檔案進行讀寫,程式碼如下所示:
var fs = require("fs"); // 异步打开文件 console.log("准备打开文件!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("文件打开成功!"); });
以上程式碼執行結果如下:
$ node file.js 准备打开文件! 文件打开成功!
取得檔案資訊
語法
以下為透過非同步模式取得檔案資訊的語法格式:
fs.stat(path, callback)
參數
##參數使用說明如下:path - 檔案路徑。
callback - 回呼函數,有兩個參數如:(err, stats), stats 是 fs.Stats 物件。
var fs = require('fs'); fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) { console.log(stats.isFile()); //true })stats類別中的方法有:
##描述 | |
---|---|
如果是檔案回傳true,否則回傳false。 | |
如果是目錄回傳 true,否則回傳 false。 | |
如果是區塊裝置回傳 true,否則回傳 false。 | |
如果字元裝置傳回 true,否則傳回 false。 | |
如果是軟連結回傳 true,否則回傳 false。 | |
如果是FIFO,回傳true,否則回傳 false。 FIFO是UNIX中的一種特殊類型的命令管道。 | |
如果是 Socket 回傳 true,否則回傳 false。 |
序號 | 方法& 描述 |
---|---|
#1 | fs.rename(oldPath, newPath, callback) 非同步rename().回呼函數沒有參數,但可能拋出例外。 |
2 | fs.ftruncate(fd, len, callback) 非同步ftruncate().回呼函數沒有參數,但可能拋出例外. |
3 | fs.ftruncateSync(fd, len) 同步ftruncate() |
#4 | fs.truncate(path, len, callback) #非同步truncate().回呼函數沒有參數,但可能拋出例外。 |
5 | fs.truncateSync(path, len) 同步truncate() |
6 | fs.chown(path, uid, gid, callback) 非同步chown().回呼函數沒有參數,但可能拋出例外。 |
7 | fs.chownSync(path, uid, gid) 同步chown() |
8 | fs.fchown(fd, uid, gid, callback) 非同步fchown().回呼函數沒有參數,但可能會拋出例外。 |
9 | fs.fchownSync(fd, uid, gid) 同步fchown() |
#10 | fs.lchown(path, uid, gid, callback) 非同步lchown().回呼函數沒有參數,但可能拋出例外。 |
11 | fs.lchownSync(path, uid, gid) 同步lchown() |
#12 | fs.chmod(path, mode, callback) 非同步chmod().回呼函數沒有參數,但可能拋出例外。 |
13 | fs.chmodSync(path, mode) 同步chmod(). |
14 | fs.fchmod(fd, mode, callback) 非同步fchmod().回呼函數沒有參數,但可能拋出例外。 |
15 | fs.fchmodSync(fd, mode) 同步fchmod(). |
#16 | fs.lchmod(path, mode, callback) 非同步lchmod().回呼函數沒有參數,但可能拋出例外。 Only available on Mac OS X. |
17 | fs.lchmodSync(path, mode) 同步lchmod(). |
18 | fs.stat(path, callback) 非同步stat().回呼函數有兩個參數err, stats,stats是fs.Stats 物件。 |
19 | fs.lstat(path, callback) 非同步lstat(). 回呼函數有兩個參數err, stats ,stats 是fs.Stats 物件。 |
20 | fs.fstat(fd, callback) 非同步fstat(). 回呼函數有兩個參數err, stats ,stats 是fs.Stats 物件。 |
21 | fs.statSync(path) 同步 stat(). 傳回 fs.Stats 的實例。 ############22#########fs.lstatSync(path)######同步 lstat(). 傳回 fs.Stats 的實例。 ############23#########fs.fstatSync(fd)#######同步 fstat(). 傳回 fs.Stats 的實例。 |
24 | fs.link(srcpath, dstpath, callback) 非同步link().回呼函數沒有參數,但可能拋出例外. |
25 | fs.linkSync(srcpath, dstpath) 同步link(). |
#26 | fs.symlink(srcpath, dstpath[, type], callback) 非同步symlink().回呼函數沒有參數,但可能拋出例外。 type 參數可以設定為 'dir', 'file', 或 'junction' (預設為 'file') 。 |
27 | fs.symlinkSync(srcpath, dstpath[, 型]) 同步symlink(). |
28 | fs.readlink(path, callback) 非同步readlink(). 回呼函數有兩個參數err, linkString。 |
29 | fs.realpath(path[, cache], callback) 非同步realpath(). 回呼函數有兩個參數err, resolvedPath。 |
30 | fs.realpathSync(path[, cache]) 同步 realpath()。返回絕對路徑。 |
31 | fs.unlink(path, callback) 非同步unlink().回呼函數沒有參數,但可能會拋出異常。 |
32 | #fs.unlinkSync(path) 同步unlink(). |
33 | fs.rmdir(path, callback) 非同步rmdir().回呼函數沒有參數,但可能拋出例外。 |
34 | fs.rmdirSync(path) 同步rmdir(). |
35 fs.mkdir(path[, mode], callback) | |
36 fs.mkdirSync(path[, mode]) | |
37 fs.readdir(path, callback) | |
38 fs.readdirSync(path) | |
39 fs.close(fd, callback) | |
40 fs.closeSync(fd) | |
# #41 | fs.open(path, flags[, mode], callback)|
42 ###fs.openSync(path, flags[, mode])######同步version of fs.open().# ###########43#########fs.utimes(path, atime, mtime, callback)###### ############ #44#########fs.utimesSync(path, atime, mtime)######修改檔案時間戳,檔案經由指定的檔案路徑。 ############45#########fs.futimes(fd, atime, mtime, callback)###### ########### ##46#########fs.futimesSync(fd, atime, mtime)######修改檔案時間戳,透過檔案描述符指定。 | |
47 | fs.fsync(fd, callback) 非同步 fsync.回呼函數沒有參數,但可能拋出例外。 |
48 | fs.fsyncSync(fd) #同步fsync. |
49 | fs.write(fd, buffer, offset, length[, position], callback) 將緩衝區內容寫入到透過檔案描述子指定的檔案。 |
50 | fs.write(fd, data[, position[, encoding]], callback) 透過檔案描述符fd 寫入文件內容。 |
51 | fs.writeSync(fd, buffer, offset, length[, position]) 同步版的fs.write ()。 |
52 | fs.writeSync(fd, data[, position[, encoding]]) 同步版的fs.write (). |
53 | fs.read(fd, buffer, offset, length, position, callback) #透過檔案描述符fd 讀取檔案內容。 |
54 | fs.readSync(fd, buffer, offset, length, position) 同步版的fs.read. |
55 | fs.readFile(filename[, options], callback) 非同步讀取檔案內容。 |
56 | fs.readFileSync(filename[, options])<br同步版的fs.readfile.<="" td=""> |
57 | #fs.writeFile(filename, data[, options], callback) 非同步寫入文件內容。 |
58 | fs.writeFileSync(filename, data[, options]) 同步版的 fs.writeFile。 |
59 | fs.appendFile(filename, data[, options], callback) 非同步追加檔案內容。 |
60 | fs.appendFileSync(filename, data[, options]) The 同步version of fs.appendFile. |
61 | fs.watchFile(filename[, options], listener) 檢視檔案的修改。 |
62 | fs.unwatchFile(filename[, listener]) 停止查看 filename 的修改。 |
63 | fs.watch(filename[, options][, listener]) 查看filename 的修改,filename 可以是文件或目錄。傳回 fs.FSWatcher 物件。 |
64 | fs.exists(path, callback) #偵測給定的路徑是否存在。 |
65 | fs.existsSync(path) 同步版的fs.exists. |
#66 | fs.access(path[, mode], callback) 測試指定路徑使用者權限。 |
67 | fs.accessSync(path[, mode]) 同步版的 fs.access。 |
68 | fs.createReadStream(path[, options]) 傳回ReadStream 物件。 |
69 | fs.createWriteStream(path[, options]) 傳回 WriteStream 物件。 |
70 | fs.symlink(srcpath, dstpath[, type], callback) 非同步symlink().回呼函數沒有參數,但可能拋出異常。 |
更多內容,請查看官網檔案模組描述:File System。