Node.js 文件系統

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().回調函數沒有參數,但可能拋出異常。

更多能夠查看:https://www.9xkd.com/3716132715.html

相關文章
相關標籤/搜索