Node.js 中咱們能夠使用 fs(File System) 模塊來操做文件,文件系統模塊有兩種不一樣的方法,分別是同步方法和異步方法。html
Node.js 文件系統模塊中的方法均有異步和同步版本,例如同步讀取文件內容能夠使用 fs.readFileSync()
方法,而異步讀取文件內容能夠使用 fs.readFile()
方法。node
異步方法函數最後一個參數爲回調函數,回調函數的第一個參數包含了錯誤信息。segmentfault
在大型系統中,通常咱們會使用異步方法,由於同步方法容易致使進程被鎖死。因此比起同步方法,異步方法的性能更高、速度更快、並且沒有阻塞。數組
假設有一個test.txt文件的內容以下所示:app
學互聯網工做技能,上俠課島!
咱們使用同步方法來讀取上面這個文件中的內容,建立一個名爲 synchronization.js 的文件,文件中的內容以下,使用readFileSync()
方法讀取內容:異步
var fs = require("fs"); var data = fs.readFileSync('test.txt'); console.log("同步讀取文件內容爲:\n" + data.toString()); console.log("程序執行完畢");
啓動這個 Node.js 文件,就會成功讀取文件中的內容,以下所示:async
>node synchronization.js 同步讀取文件內容爲: 學互聯網工做技能,上俠課島! 程序執行完畢
使用異步方法讀取 test.txt 文件中的內容,咱們只須要將 readFileSync()
方法替換成 readFile()
方法。 建立一個名爲 asynchronous.js 的文件,文件中的內容以下所示,在使用 readFile()
方法時,注意第二個參數是一個回調函數,包含了錯誤信息:函數
var fs = require("fs") fs.readFile('test.txt', function(err,data){ if(err){ return console.error(err); } console.log("異步讀取文件內容爲:\n"+data.toString()); }); console.log("程序執行完畢");
啓動這個文件,會輸出以下所示內容:性能
>node asynchronous.js 程序執行完畢 異步讀取文件內容爲: 學互聯網工做技能,上俠課島!
要使用文件系統模塊 fs,首先須要使用require()方法引入模塊,這個咱們之前已經講過好幾回啦,語法以下所示:測試
var fs = require('fs');
引入模塊後,咱們能夠經過這個模塊,能夠實現打開文件、讀取文件、寫入文件、關閉文件等操做。
在異步模式下打開文件的語法以下所示:
fs.open(path, flags[, mode], callback)
path
:文件路徑。flags
:文件打開行爲。mode
:文件模式。callback
:回調函數,帶有兩個參數:err和fd。var fs = require("fs"); console.log("準備打開文件") fs.open('test.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("文件打開成功!"); });
啓動這個文件,會成功輸出以下內容:
> node openfile.js 準備打開文件 文件打開成功!
異步模式下讀取文件的語法爲:
fs.read(fd, buffer, offset, length, position, callback)
fd
:文件描述符。buffer
:數據寫入的緩衝區。offset
:緩衝區寫入的寫入偏移量。length
:要從文件中讀取的字節數。position
:文件讀取的起始位置,如值爲null,則會從當前文件指針的位置讀取。callback
:回調函數,帶有三個參數:err錯誤信息、bytesRead讀取的字節數、buffer緩衝區對象。var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("準備打開文件"); fs.open('test.txt', 'r+', function(err, fd){ if(err){ return console.error(err); } console.log("文件打開成功!\n"); console.log("開始讀取文件!"); fs.read(fd, buf, 0, buf.length, 0, function(err,bytes){ if(err){ console.log(err); } console.log("總共有讀取了" + bytes + "個字節"); if(bytes > 0){ console.log("讀取的內容爲:" + "\n" + buf.slice(0, bytes).toString()); } }); });
啓動這個文件,輸出以下內容,則表示讀取文件操做成功:
>node readfile.js 準備打開文件 文件打開成功! 開始讀取文件! 總共有讀取了42個字節 讀取的內容爲: 學互聯網工做技能,上俠課島!
異步模式下寫入文件的語法爲:
fs.writeFile(file, data[, options], callback)
file
:文件名或文件描述符。data
:要寫入文件的數據,能夠是 String(字符串) 或 Buffer(緩衝) 對象。options
:該參數是一個對象,包含 {encoding, mode, flag}。默認編碼爲utf8,模式爲 0666,flag爲'w'。callback
:回調函數,回調函數只包含錯誤信息參數(err),在寫入失敗時返回。var fs = require("fs"); console.log("準備寫入文件"); fs.writeFile('write.txt', '這裏是要寫入的數據內容', function(err){ if (err) { return console.error(err); } console.log("數據寫入成功!"); });
啓動文件,write.txt中成功被寫內容:
> node writefile.js 準備寫入文件 數據寫入成功!
異步模式下關閉文件的語法爲:
fs.close(fd, callback)
fd
:經過fs.open()方法返回的文件描述符。callback
:回調函數,沒有參數。var fs = require("fs"); console.log("準備開文件") fs.open('test.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("文件打開成功!\n"); //關閉文件 console.log("準備關閉文件"); fs.close(fd,function(err){ if(err) { console.log(err); } console.log('文件關閉成功!'); }); });
啓動文件:
> node close.js 準備開文件 文件打開成功! 準備關閉文件 文件關閉成功!
方法 | 描述 |
---|---|
fs.rename(oldPath, newPath, callback) | 異步 rename(),回調函數沒有參數,但可能拋出異常 |
fs.ftruncate(fd, len, callback) | 異步 ftruncate(),回調函數沒有參數,但可能拋出異常 |
fs.ftruncateSync(fd, len) | 同步 ftruncate() |
fs.truncate(path, len, callback) | 異步 truncate(),回調函數沒有參數,但可能拋出異常 |
fs.truncateSync(path, len) | 同步 truncate() |
fs.chown(path, uid, gid, callback) | 異步 chown(),回調函數沒有參數,但可能拋出異常 |
fs.chownSync(path, uid, gid) | 同步 chown() |
fs.fchown(fd, uid, gid, callback) | 異步 fchown(),回調函數沒有參數,但可能拋出異常 |
fs.fchownSync(fd, uid, gid) | 同步 fchown() |
fs.lchown(path, uid, gid, callback) | 異步 lchown(),回調函數沒有參數,但可能拋出異常 |
fs.lchownSync(path, uid, gid) | 同步 lchown() |
fs.chmod(path, mode, callback) | 異步 chmod(),回調函數沒有參數,但可能拋出異常。 |
fs.chmodSync(path, mode) | 同步 chmod() |
fs.fchmod(fd, mode, callback) | 異步 fchmod(),回調函數沒有參數,但可能拋出異常 |
fs.fchmodSync(fd, mode) | 同步 fchmod() |
fs.lchmod(path, mode, callback) | 異步 lchmod().回調函數沒有參數,但可能拋出異常。Only available on Mac OS X |
fs.lchmodSync(path, mode) | 同步 lchmod() |
fs.stat(path, callback) | 異步 stat(). 回調函數有兩個參數 err, stats,stats 是 fs.Stats 對象 |
fs.lstat(path, callback) | 異步 lstat(). 回調函數有兩個參數 err, stats,stats 是 fs.Stats 對象 |
fs.fstat(fd, callback) | 異步 fstat(). 回調函數有兩個參數 err, stats,stats 是 fs.Stats 對象 |
fs.statSync(path) | 同步 stat(). 返回 fs.Stats 的實例 |
fs.lstatSync(path) | 同步 lstat(). 返回 fs.Stats 的實例 |
fs.fstatSync(fd) | 同步 fstat(). 返回 fs.Stats 的實例 |
fs.link(srcpath, dstpath, callback) | 異步 link().回調函數沒有參數,但可能拋出異常 |
fs.linkSync(srcpath, dstpath) | 同步 link() |
fs.symlink(srcpath, dstpath[, type], callback) | 異步 symlink().回調函數沒有參數,但可能拋出異常。 type 參數能夠設置爲 'dir', 'file', 或 'junction' (默認爲 'file') |
fs.symlinkSync(srcpath, dstpath[, type]) | 同步 symlink(). |
fs.readlink(path, callback) | 異步 readlink(). 回調函數有兩個參數 err, linkString |
fs.realpath(path[, cache], callback) | 異步 realpath(). 回調函數有兩個參數 err, resolvedPath |
fs.realpathSync(path[, cache]) | 同步 realpath()。返回絕對路徑 |
fs.unlink(path, callback) | 異步 unlink(),回調函數沒有參數,但可能拋出異常 |
fs.unlinkSync(path) | 同步 unlink(). |
fs.rmdir(path, callback) | 異步 rmdir(),回調函數沒有參數,但可能拋出異常 |
fs.rmdirSync(path) | 同步 rmdir(). |
fs.mkdir(path[, mode], callback) | S異步 mkdir(2),回調函數沒有參數,但可能拋出異常。 訪問權限默認爲 0777 |
fs.mkdirSync(path[, mode]) | 同步 mkdir(). |
fs.readdir(path, callback) | 異步 readdir(3),讀取目錄的內容 |
fs.readdirSync(path) | 同步 readdir(),文件數組列表 |
fs.close(fd, callback) | 異步 close(),回調函數沒有參數,但可能拋出異常 |
fs.closeSync(fd) | 同步 close(). |
fs.open(path, flags[, mode], callback) | 異步打開文件。 |
fs.openSync(path, flags[, mode]) | 同步 version of fs.open(). |
fs.utimes(path, atime, mtime, callback) | |
fs.utimesSync(path, atime, mtime) | 修改文件時間戳,文件經過指定的文件路徑。 |
fs.futimes(fd, atime, mtime, callback) | |
fs.futimesSync(fd, atime, mtime) | 修改文件時間戳,經過文件描述符指定。 |
fs.fsync(fd, callback) | 異步 fsync.回調函數沒有參數,但可能拋出異常。 |
fs.fsyncSync(fd) | 同步 fsync. |
fs.write(fd, buffer, offset, length[, position], callback) | 將緩衝區內容寫入到經過文件描述符指定的文件。 |
fs.write(fd, data[, position[, encoding]], callback) | 經過文件描述符 fd 寫入文件內容。 |
fs.writeSync(fd, buffer, offset, length[, position]) | 同步版的 fs.write()。 |
fs.writeSync(fd, data[, position[, encoding]]) | 同步版的 fs.write(). |
fs.read(fd, buffer, offset, length, position, callback) | 經過文件描述符 fd 讀取文件內容。 |
fs.readSync(fd, buffer, offset, length, position) | 同步版的 fs.read. |
fs.readFile(filename[, options], callback) | 異步讀取文件內容。 |
fs.readFileSync(filename[, options]) | |
fs.writeFile(filename, data[, options], callback) | 異步寫入文件內容。 |
fs.writeFileSync(filename, data[, options]) | 同步版的 fs.writeFile。 |
fs.appendFile(filename, data[, options], callback) | 異步追加文件內容。 |
fs.appendFileSync(filename, data[, options]) | The 同步 version of fs.appendFile. |
fs.watchFile(filename[, options], listener) | 查看文件的修改。 |
fs.unwatchFile(filename[, listener]) | 中止查看 filename 的修改。 |
fs.watch(filename[](#)) | 查看 filename 的修改,filename 能夠是文件或目錄。返回 fs.FSWatcher 對象。 |
fs.exists(path, callback) | 檢測給定的路徑是否存在。 |
fs.existsSync(path) | 同步版的 fs.exists. |
fs.access(path[, mode], callback) | 測試指定路徑用戶權限。 |
fs.accessSync(path[, mode]) | 同步版的 fs.access。 |
fs.createReadStream(path[, options]) | 返回ReadStream 對象。 |
fs.createWriteStream(path[, options]) | 返回 WriteStream 對象。 |
fs.symlink(srcpath, dstpath[, type], callback) | 異步 symlink().回調函數沒有參數,但可能拋出異常。 |