欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

node.js中fs文件系統(tǒng)模塊的使用方法實(shí)例詳解

 更新時(shí)間:2020年02月13日 10:47:46   作者:懷素真  
這篇文章主要介紹了node.js中fs文件系統(tǒng)模塊的使用方法,結(jié)合實(shí)例形式詳細(xì)分析了node.js fs文件系統(tǒng)模塊各種常見(jiàn)方法的基本使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了node.js中fs文件系統(tǒng)模塊的使用方法。分享給大家供大家參考,具體如下:

node.js中為我們提供了fs文件系統(tǒng)模塊,實(shí)現(xiàn)對(duì)文件或目錄的創(chuàng)建,修改和刪除等操作。

fs模塊中,所有的方法分為同步和異步兩種實(shí)現(xiàn)。

有 sync 后綴的方法為同步方法,沒(méi)有 sync 后綴的方法為異步方法。

一、文件的整個(gè)讀取

const fs = require('fs');
//參數(shù)一表示讀取的文件
//參數(shù)二表示讀取的配置,{encoding:'null', flag:'r'}
//encoding 表示編碼方式
//flag 表示文件系統(tǒng)標(biāo)志
//如果沒(méi)有指定參數(shù)二中的encoding,則data返回的是一個(gè)Buffer
fs.readFile('./1.txt', function (err, data) {
  console.log(data);
});
//如果指定了,則data返回的是解析后的字符串
fs.readFile('./1.txt', {'encoding': 'utf8', 'flag': 'r'}, function (err, data) {
  console.log(data);
});

或同步讀?。?/p>

const fs = require('fs');
let data = fs.readFileSync('./1.txt');
console.log(data);
let data2 = fs.readFileSync('./1.txt', {'encoding': 'utf8'});
console.log(data2);

二、往文件寫(xiě)入數(shù)據(jù)

const fs = require('fs');
//參數(shù)一表示需要寫(xiě)入的文件
//參數(shù)二表示寫(xiě)入的數(shù)據(jù)
//參數(shù)三表示寫(xiě)入配置 {encoding:'utf8', mode:'0o666', flag:'w'}
//encoding 表示文件編碼
//mode 表示文件權(quán)限
//flag 表示表示文件系統(tǒng)標(biāo)志
fs.writeFile('./1.txt', '數(shù)據(jù)', {'mode': 0o666, 'flag': 'w'}, function (err) {
  console.log(err);
});
//注意如果文件已存在,默認(rèn)會(huì)覆蓋寫(xiě)入
fs.writeFile('./1.txt', '你好', function (err) {
  console.log(err);
});
//如果想追加寫(xiě)入,將flag設(shè)置為'a'就可以了。
fs.writeFile('./1.txt', '你好', {'flag': 'a'}, function (err) {
  console.log(err);
});

注意,writeFile() 默認(rèn)會(huì)以覆蓋的方式寫(xiě)入數(shù)據(jù)。

或者同步寫(xiě)入數(shù)據(jù):

const fs = require('fs');
fs.writeFileSync('./1.txt', '數(shù)據(jù)');

關(guān)于 mode 文件權(quán)限的說(shuō)明:

在linux中文件的權(quán)限會(huì)為3種,4-表示可讀,2-表示可寫(xiě),1-表示可執(zhí)行。它們之間的相互組合形成不同權(quán)限。

對(duì)于文件,有三個(gè)權(quán)限分配,1:文件所有者,2:文件所屬組,3:其他用戶(hù)。

關(guān)于 flag 文件系統(tǒng)標(biāo)志的說(shuō)明:

r 表示 讀取
表示 寫(xiě)入
表示 同步
表示 追加
表示 文件存在就報(bào)錯(cuò)
表示 增加相反操作

r+ 與 w+ 區(qū)別,文件不存在時(shí),r+ 不會(huì)創(chuàng)建文件,而 w+ 會(huì)創(chuàng)建。如果文件存在 r+ 不會(huì)清空文件,而 w+ 會(huì)清空文件。

三、往文件中追加數(shù)據(jù)

const fs = require('fs');
fs.appendFile('./1.txt', '數(shù)據(jù)', function (err) {
  console.log(err);
});
fs.appendFileSync('./1.txt', '同步追加');

四、拷貝文件

const fs = require('fs');
//參數(shù)一表示源文件
//參數(shù)二表示目標(biāo)文件
//參數(shù)三表示拷貝操作的修飾符,默認(rèn)0
//參數(shù)四表示回調(diào)函數(shù)
fs.copyFile('./1.txt', './2.txt', function (err) {
  console.log(err);
});
//同步拷貝文件
fs.copyFileSync('./1.txt', './3.txt');

五、打開(kāi)文件,讀取文件,寫(xiě)入文件

const fs = require('fs');
//參數(shù)一表示文件路徑
//參數(shù)二表示文件系統(tǒng)標(biāo)志
//參數(shù)三表示文件權(quán)限
//參數(shù)四表示回調(diào)函數(shù),err表示錯(cuò)誤,fd表示文件描述符,是一個(gè)整型
fs.open('./1.txt', 'r+', 0o666, function (err, fd) {
  //創(chuàng)建一個(gè)3字節(jié)的Buffer,用來(lái)接收數(shù)據(jù)
  let rbuf = Buffer.alloc(3);
  //參數(shù)一表示文件描述符
  //參數(shù)二表示接收數(shù)據(jù)的Buffer
  //參數(shù)三表示往Buffer中寫(xiě)入的偏移量
  //參數(shù)四表示讀取的字節(jié)數(shù)
  //參數(shù)五表示從文件中讀取的位置,如果為null,則是文件的當(dāng)前位置讀取
  //參數(shù)六表示回調(diào)函數(shù),err表示錯(cuò)誤,bytesRead表示實(shí)際讀取的字節(jié),buffer表示接收數(shù)據(jù)的Buffer
  fs.read(fd, rbuf, 0, 3, 0, function (err, bytesRead, buffer) {
    console.log(rbuf.toString());
    console.log(bytesRead);
  });
  let wbuf = Buffer.from('中國(guó)');
  //參數(shù)一表示文件描述符
  //參數(shù)二表示寫(xiě)入數(shù)據(jù)的Buffer
  //參數(shù)三表示往Buffer中讀取的偏移量
  //參數(shù)四表示寫(xiě)入的字節(jié)數(shù)
  //參數(shù)五表示從文件中寫(xiě)入的位置,如果不等于數(shù)字,則從文件的當(dāng)前位置寫(xiě)入
  //參數(shù)六表示回調(diào)函數(shù),err表示錯(cuò)誤,written表示實(shí)際寫(xiě)入的字節(jié)數(shù),buffer表示寫(xiě)入數(shù)據(jù)的Buffer
  fs.write(fd, wbuf, 0, 3, fs.stat, function (err, written, buffer) {
    console.log(written);
  });
});

六、同步磁盤(pán)緩存,把緩沖區(qū)數(shù)據(jù)刷新到文件中。

const fs = require('fs');
fs.open('./1.txt', 'w+', 0o666, function (err, fd) {
  let data = Buffer.from('數(shù)據(jù)\n');
  let task = [];
  //我們往文件中循環(huán)寫(xiě)入數(shù)據(jù)
  for (ix = 0; ix < 1000; ix++) {
    task.push(function () {
      return new Promise((resolve, reject) => {
        fs.write(fd, data, 0, data.length, null, function (err, written, buffer) {
          if (err) {
            reject(err);
          } else {
            resolve(written);
          }
        });
      });
    });
  }
  Promise.all(task.map(fn => fn())).then(value => {
    console.log(value);
  }, reason => {
    console.log(reason);
  });
  //當(dāng)們寫(xiě)完數(shù)據(jù)后,一般會(huì)強(qiáng)制刷新緩沖區(qū),讓數(shù)據(jù)寫(xiě)入到文件里,然后關(guān)閉文件。
  //因?yàn)橄到y(tǒng)為了效率,我們寫(xiě)入的數(shù)據(jù)通常會(huì)放到一個(gè)緩沖區(qū)中,當(dāng)緩沖區(qū)滿(mǎn)了后,系統(tǒng)就一次把數(shù)據(jù)寫(xiě)到文件。
  fs.fsync(fd, function (err) {
    console.log(err);
    //關(guān)閉文件
    fs.close(fd, function (err) {
      console.log(err);
    })
  });
});

七、創(chuàng)建目錄

const fs = require('fs');
//創(chuàng)建目錄,默認(rèn)情況下不支持遞歸創(chuàng)建目錄
fs.mkdir('./a', function (err) {
  console.log(err);
});
//通過(guò)設(shè)置參數(shù)二中的recursive為true,則可以遞歸創(chuàng)建目錄
fs.mkdir('./a/b/c', {'recursive': true}, function (err) {
  console.log(err);
});

八、刪除目錄

const fs = require('fs');
//rmdir無(wú)法刪除非空目錄
fs.rmdir('./a', function (err) {
  console.log(err);
});

九、測(cè)試文件或目錄是否存在,是否可讀,是否可寫(xiě)

const fs = require('fs');
let path = './a';
//判斷是否存在
fs.access(path, fs.constants.F_OK, function (err) {
  console.log(err ? '不存在' : '存在');
});
//判斷是否可讀
fs.access(path, fs.constants.R_OK, function (err) {
  console.log(err ? '不可讀' : '可讀');
});
//判斷是否可寫(xiě)
fs.access(path, fs.constants.W_OK, function (err) {
  console.log(err ? '不可寫(xiě)' : '可寫(xiě)');
});

十、讀取目錄下的所有文件

const fs = require('fs');
const path = require('path');
//讀取目錄下所有文件
fs.readdir('./a', function (err, files) {
  console.log(files);
});
//遞歸的讀取一個(gè)目錄所有文件
function readDir(dir) {
  fs.stat(dir, function (err, stats) {
    if (stats.isDirectory()) {
      console.log(dir);
      fs.readdir(dir, function (err, files) {
        files.map(value => {
          let cur = path.join(dir, value);
          fs.stat(cur, function (err, stats) {
            if (stats.isDirectory()) {
              readDir(cur);
            } else {
              console.log(cur);
            }
          });
        });
      });
    } else {
      console.log(dir);
    }
  });
}
readDir('./node_modules');

十一、查看文件或目錄的詳細(xì)信息

const fs = require('fs');
//獲取目錄詳細(xì)信息
fs.stat('./a', function (err, stats) {
  console.log(stats);
});
//獲取文件詳細(xì)信息
fs.stat('./1.txt', function (err, stats) {
  console.log(stats);
});

  • stats.size 表示文件大小。
  • stats.atime 表示文件中的數(shù)據(jù)最后訪(fǎng)問(wèn)時(shí)間。
  • stats.mtime 表示文件中的內(nèi)容修改最后時(shí)間。
  • stats.ctime 表示文件權(quán)限,擁有者,所屬組,鏈接數(shù)發(fā)生改變時(shí)的時(shí)間。
  • stats.birthtime 表示文件創(chuàng)建時(shí)間。

十二、重命名或移動(dòng)文件

const fs = require('fs');
//重命名文件
fs.rename('./1.txt', './b.txt', function (err) {
  console.log(err);
});
//移動(dòng)文件
fs.rename('./2.txt', './a/b/c/2.txt', function (err) {
  console.log(err);
});

十三、刪除文件

const fs = require('fs');
//刪除文件
fs.unlink('./3.txt', function (err) {
  console.log(err);
});

十四、截取文件

const fs = require('fs');
//截取文件成3個(gè)字節(jié)
fs.truncate('./b.txt', 3, function (err) {
  console.log(err);
});

十五、監(jiān)視文件或目錄的狀態(tài)改變

const fs = require('fs');
//監(jiān)視目錄
fs.watchFile('./a', function (curr, prev) {
  console.log(curr);
  console.log(prev);
  if (curr.mtimeMs !== prev.mtimeMs) {
    console.log('內(nèi)容發(fā)生的改變');
  }
});

希望本文所述對(duì)大家node.js程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • node.js中的querystring.escape方法使用說(shuō)明

    node.js中的querystring.escape方法使用說(shuō)明

    這篇文章主要介紹了node.js中的querystring.escape方法使用說(shuō)明,本文介紹了querystring.escape的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node中使用shell腳本的方法步驟

    node中使用shell腳本的方法步驟

    這篇文章主要介紹了node中使用shell腳本的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 使用Node.js的readline模塊逐行讀取并解析大文件

    使用Node.js的readline模塊逐行讀取并解析大文件

    在Node.js環(huán)境中處理大文件是一個(gè)常見(jiàn)的需求,尤其是在處理日志文件、數(shù)據(jù)庫(kù)導(dǎo)出、或任何形式的大規(guī)模文本數(shù)據(jù)時(shí),本文將深入探討如何使用Node.js的readline模塊來(lái)實(shí)現(xiàn)這一功能,并討論相關(guān)的性能優(yōu)化和注意事項(xiàng),需要的朋友可以參考下
    2024-09-09
  • 通過(guò)NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    通過(guò)NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    本文介紹了GRPC和協(xié)議緩沖區(qū)的基本概念,并展示了如何在NodeJS應(yīng)用程序中使用它們,GRPC是一個(gè)高性能RPC框架,協(xié)議緩沖區(qū)則用于定義服務(wù)和序列化消息,本文給大家介紹如何在NodeJS應(yīng)用程序中使用GRPC和協(xié)議緩沖區(qū),感興趣的朋友一起看看吧
    2024-10-10
  • nodejs中實(shí)現(xiàn)修改用戶(hù)路由功能

    nodejs中實(shí)現(xiàn)修改用戶(hù)路由功能

    這篇文章主要介紹了nodejs中實(shí)現(xiàn)修改用戶(hù)路由功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • NodeJs form-data格式傳輸文件的方法

    NodeJs form-data格式傳輸文件的方法

    這篇文章主要介紹了NodeJs form-data格式傳輸文件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 用Node寫(xiě)一條配置環(huán)境的指令

    用Node寫(xiě)一條配置環(huán)境的指令

    這篇文章主要介紹了用Node寫(xiě)一條配置環(huán)境的指令,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • nodejs判斷文件、文件夾是否存在及刪除的方法

    nodejs判斷文件、文件夾是否存在及刪除的方法

    這篇文章主要介紹了nodejs判斷文件、文件夾是否存在及刪除的方法,結(jié)合實(shí)例形式分析了nodejs基于文件模塊針對(duì)文件與文件夾的存在判斷、刪除等操作技巧,需要的朋友可以參考下
    2017-11-11
  • nodejs取得當(dāng)前執(zhí)行路徑的方法

    nodejs取得當(dāng)前執(zhí)行路徑的方法

    今天小編就為大家分享一篇nodejs取得當(dāng)前執(zhí)行路徑的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 用Nodejs搭建服務(wù)器訪(fǎng)問(wèn)html、css、JS等靜態(tài)資源文件

    用Nodejs搭建服務(wù)器訪(fǎng)問(wèn)html、css、JS等靜態(tài)資源文件

    本篇文章主要介紹了用Nodejs搭建服務(wù)器訪(fǎng)問(wèn)html、css、JS等靜態(tài)資源文件的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04

最新評(píng)論