国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Node文件系統(tǒng)fs模塊】

MyFaith / 2923人閱讀

摘要:一個例子測試返回值當緩存區(qū)寫滿時,輸出一個例子當緩存區(qū)數(shù)據(jù)全部輸出時,觸發(fā)事件系統(tǒng)緩存區(qū)數(shù)據(jù)已經(jīng)全部輸出。數(shù)據(jù)可讀文件讀取完成系統(tǒng)緩存區(qū)數(shù)據(jù)已經(jīng)全部輸出。要寫入的數(shù)據(jù)文件已經(jīng)打開,文件描述符是文件系統(tǒng)模塊同步更新

環(huán)境:Node v8.2.1; Npm v5.3.0; OS Windows10

1、fs 模塊API

nodejs的文件操作大部分API都提供了同步和異步的兩種方式,下面是異步API結構圖,同步方法在異步方法后面加【Sync】就行了

1.1 API結構圖

1.2 文件讀寫模式對應編碼

2、一些例子

下面是部分API的例子,對部分API的一個簡單代碼實現(xiàn)

2.1 readFile讀取文件
//readFile(filename,[options],callback);

/**
 * filename, 必選參數(shù),文件名
 * [options],可選參數(shù),可指定flag(文件操作選項,如r+ 讀寫;w+ 讀寫,文件不存在則創(chuàng)建)及encoding屬性
 * callback 讀取文件后的回調函數(shù),參數(shù)默認第一個err,第二個data 數(shù)據(jù)
 */

const fs = require("fs");
fs.readFile("./package.json",{flag:"r+",encoding:"utf8"},(err,data)=>{
    if(err)
        throw err;
    console.log(data);
})
2.2 writeFile寫文件
// fs.writeFile(filename,data,[options],callback);
/**
 * filename, 必選參數(shù),文件名
 * data, 寫入的數(shù)據(jù),可以字符或一個Buffer對象
 * [options],flag,mode(權限),encoding
 * callback 讀取文件后的回調函數(shù),參數(shù)默認第一個err,第二個data 數(shù)據(jù)
 */

const fs = require("fs");
const data="hello world";
const bf=Buffer.from(data);
//buffer寫入
fs.writeFile("./test.txt",bf,err=>{
    if(err)
        throw err;
    console.log("寫入成功");
})

//字符寫入
fs.writeFile("./test.txt",data,err=>{
    if(err)
        throw err;
    console.log("寫入成功");
})
2.3 以追加方式寫文件
// fs.appendFile(filename,data,[options],callback);
const fs = require("fs");
const data = " hello world";
const bf = Buffer.from(data);
//buffer
fs.appendFile("./test.txt", bf, err => {
    if (err)
        throw err;
    console.log("追加成功");
})

fs.appendFile("./test.txt", data, err => {
    if (err)
        throw err;
    console.log("追加成功");
})
2.4 open打開文件

打開文件,獲取文件描述

// fs.open(filename, flags, [mode], callback);

/**
 * filename, 必選參數(shù),文件名
 * flags, 操作標識,如"r",讀方式打開
 * [mode],權限,如777,表示任何用戶讀寫可執(zhí)行
 * callback 打開文件后回調函數(shù),參數(shù)默認第一個err,第二個fd為一個整數(shù),表示打開文件返回的文件描述符,window中又稱文件句柄
 */

const fs = require("fs");
fs.open("./test.txt","r",0666,(err,fd)=>{
    if(err)
        throw err;
    console.log(fd);    //3
})

【0666】為【文件權限碼】,也可以在【fs.constants】中輸出

2.5 讀文件,讀取打開的文件內(nèi)容到緩沖區(qū)中
//fs.read(fd, buffer, offset, length, position, callback);
/**
 * fd, 使用fs.open打開成功后返回的文件描述符
 * buffer, 一個Buffer對象,v8引擎分配的一段內(nèi)存
 * offset, 整數(shù),向緩存區(qū)中寫入時的初始位置,以字節(jié)為單位
 * length, 整數(shù),讀取文件的長度
 * position, 整數(shù),讀取文件初始位置;文件大小以字節(jié)為單位
 * callback(err, bytesRead, buffer), 讀取執(zhí)行完成后回調函數(shù),bytesRead實際讀取字節(jié)數(shù),被讀取的緩存區(qū)對象
 */
const fs = require("fs");
fs.open("./test.txt", "r", (err, fd) => {
    if (err)
        throw err;
    let bf = Buffer.alloc(255);
    fs.read(fd,bf,0,9,0,(err,bytesRead,buffer)=>{
        if(err)
            throw err;
        console.log(bytesRead);
        console.log(buffer.toString());
    })
})
2.6 寫文件,將緩沖區(qū)內(nèi)數(shù)據(jù)寫入使用fs.open打開的文件
//fs.write(fd, buffer, offset, length, position, callback);

/**
 * fd, 使用fs.open打開成功后返回的文件描述符
 * buffer, 一個Buffer對象,v8引擎分配的一段內(nèi)存
 * offset, 整數(shù),從緩存區(qū)中讀取時的初始位置,以字節(jié)為單位
 * length, 整數(shù),從緩存區(qū)中讀取數(shù)據(jù)的字節(jié)數(shù)
 * position, 整數(shù),寫入文件初始位置;
 * callback(err, written, buffer), 寫入操作執(zhí)行完成后回調函數(shù),written實際寫入字節(jié)數(shù),buffer被讀取的緩存區(qū)對象
 */
const fs = require("fs");
fs.open("./test.txt", "w", (err, fd) => {
    if (err)
        throw err;
    let bf = Buffer.from(" 寫入文件數(shù)據(jù)的內(nèi)容");
    fs.write(fd, bf, 0, bf.length, 0, (err, bytesWritten, buffer) => {
        if (err)
            throw err;
        console.log(bytesWritten);
        console.log(`寫入的內(nèi)容:${buffer.toString()}`);
    })
})
2.7 刷新緩存區(qū)

使用fs.write寫入文件時,操作系統(tǒng)是將數(shù)據(jù)讀到內(nèi)存,再把數(shù)據(jù)寫入到文件中,當數(shù)據(jù)讀完時并不代表數(shù)據(jù)已經(jīng)寫完,因為有一部分還可能在內(nèi)在緩沖區(qū)內(nèi)。
因此可以使用fs.fsync方法將內(nèi)存中數(shù)據(jù)寫入文件;--刷新內(nèi)存緩沖區(qū);

//fs.fsync(fd, [callback])
/**
 * fd, 使用fs.open打開成功后返回的文件描述符
 * [callback(err, written, buffer)], 寫入操作執(zhí)行完成后回調函數(shù),written實際寫入字節(jié)數(shù),buffer被讀取的緩存區(qū)對象
 */

const fs = require("fs");
fs.open("./test.txt", "a+", (err, fd) => {
    if (err)
        throw err;
    let bf = Buffer.from(" I love Node");
    fs.write(fd, bf, 0, bf.length, 0, (err, bytesWritten, buffer) => {
        if (err)
            throw err;
       fs.fsync(fd,(err)=>{});
       fs.close(fd,err=>{});
    })
})
2.8 讀取目錄
//使用fs.readdir讀取目錄,重點其回調函數(shù)中files對象
//fs.readdir(path, callback);

/**
 * path, 要讀取目錄的完整路徑及目錄名;
 * [callback(err, files)], 讀完目錄回調函數(shù);err錯誤對象,files數(shù)組,存放讀取到的目錄中的所有文件名
 */
const fs = require("fs"),
    path = require("path");
fs.readdir(__dirname + "/../11文件系統(tǒng)fs", (err, files) => {
    if (err)
        throw err;
    files.forEach(file => {
        let filePath = path.normalize(__dirname + "/" + file);
        fs.stat(filePath, (err, stats) => {
            if (stats.isFile()) {
                console.log(filePath + " is: " + "file");
            }
            if (stats.isDirectory()) {
                console.log(filePath + " is: " + "dir");
            }
        })
    })
})
3、流操作 3.1 創(chuàng)建讀取流
//fs.createReadStream(path, [options])
/**
 * path 文件路徑
 * [options] flags:指定文件操作,默認"r",讀操作;encoding,指定讀取流編碼;autoClose, 是否讀取完成后自動關閉,默認true;start指定文件開始讀取位置;end指定文件開始讀結束位置
 */
const fs = require("fs");
const rs = fs.createReadStream("./package.json", { flags: "r" });
rs.on("open", fd => console.log("開始讀取文件"));
rs.on("data", data => {
    console.log(data.toString());
})
rs.on("end", function () {
    console.log("讀取文件結束")
});
rs.on("close", function () {
    console.log("文件關閉");
});
rs.on("error", function (err) {
    console.error(err);
});  
3.2 創(chuàng)建寫入流
//fs.createWriteStream(path, [options])
/**
 * path 文件路徑
 * [options] flags:指定文件操作,默認"w",;encoding,指定讀取流編碼;start指定寫入文件的位置
 */

/* ws.write(chunk, [encoding], [callback]);
 * chunk,  可以為Buffer對象或一個字符串,要寫入的數(shù)據(jù)
 * [encoding],  編碼
 * [callback],  寫入后回調
 */

/* ws.end([chunk], [encoding], [callback]);
 * [chunk],  要寫入的數(shù)據(jù)
 * [encoding],  編碼
 * [callback],  寫入后回調
 */
const fs = require("fs");
const ws=fs.createWriteStream("./test.txt",{flags:"w"})
const bf=Buffer.from("I Love Node");
ws.on("open", function () {
    console.log("文件流開啟")
});
ws.on("close", function () {
    console.log("文件流關閉");
});
ws.on("error", function (err) {
    console.error(err);
});  
ws.write(bf,"utf8",(err,buffer)=>{
    console.log("寫入完成")
})
ws.end(" Bye");
3.3 使用流復制文件

流復制文件就是創(chuàng)建一個讀取流和一個寫入流,將讀取流中的流出的數(shù)據(jù)用寫入流進行寫入

//使用流復制文件
const fs = require("fs");

const rs = fs.createReadStream("./package.json");

const ws = fs.createWriteStream("./package1.json");

rs.on("data", data => {
   ws.write(data);
})

ws.on("open", function (fd) {
    console.log("要寫入的數(shù)據(jù)文件已經(jīng)打開,文件描述符是: " + fd);
  });
  
rs.on("end",()=>{
    console.log("文件讀取完成");
    ws.end("完成",()=>{
        console.log("文件寫入完成");
    })
})

關于WriteStream對象的write方法返回一個布爾類型,當緩存區(qū)中數(shù)據(jù)全部寫滿時,返回false;表示緩存區(qū)已經(jīng)寫滿,并將立即輸出到目標對象中。

一個例子測試返回值:

const fs = require("fs");

var ws = fs.createWriteStream(__dirname + "/test.txt",{flags:"w"});

for (var i = 0; i < 10000; i++) {
  var w_flag = ws.write(i.toString());
  //當緩存區(qū)寫滿時,輸出false
  console.log(w_flag);
}

一個例子當緩存區(qū)數(shù)據(jù)全部輸出時,觸發(fā)事件

const fs = require("fs");

const rs = fs.createReadStream("./ABoy.mp3");

const ws = fs.createWriteStream("./ABoy1.mp3");

rs.on("data", data => {
    let t = ws.write(data);
    if(!t){
        console.log(t);
    }
})

ws.on("drain", () => {
    console.log("系統(tǒng)緩存區(qū)數(shù)據(jù)已經(jīng)全部輸出。")
})
3.4 pipe管道用于流

上面使用一個讀取流額一個寫入流進行了一次文件的復制,還有另外一種方式就是在寫入流和讀取流之間建立一條管道,是讀取流中的數(shù)據(jù)通過管道源源不斷的流向寫入流,實現(xiàn)文件的復制。

const fs = require("fs");

const rs = fs.createReadStream("./ABoy.mp3");

const ws = fs.createWriteStream("./ABoy1.mp3");

rs.pipe(ws);

rs.on("data", function (data) {
    console.log("數(shù)據(jù)可讀")
});

rs.on("end", function () {
    console.log("文件讀取完成");
});

ws.on("drain", () => {
    console.log("系統(tǒng)緩存區(qū)數(shù)據(jù)已經(jīng)全部輸出。")
});

ws.on("open", function (fd) {
    console.log("要寫入的數(shù)據(jù)文件已經(jīng)打開,文件描述符是: " + fd);
});

CSDN 【Node文件系統(tǒng)fs模塊】同步更新

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88733.html

相關文章

  • 認識node核心模塊--從Buffer、Stream到fs

    摘要:端輸入數(shù)據(jù)到端,對就是輸入流,得到的對象就是可讀流對就是輸出端得到的對象是可寫流。在中,這四種流都是的實例,它們都有事件,可讀流具有監(jiān)聽數(shù)據(jù)到來的事件等,可寫流則具有監(jiān)聽數(shù)據(jù)已傳給低層系統(tǒng)的事件等,和都同時實現(xiàn)了和的事件和接口。 原文地址在我的博客 node中的Buffer和Stream會給剛接觸Node的前端工程師們帶來困惑,原因是前端并沒有類似概念(or 有我們也沒意識到)。然而,...

    TANKING 評論0 收藏0
  • Node.js 高級進階之 fs 文件模塊學習

    摘要:回調函數(shù)提供兩個參數(shù)和,表示有沒有錯誤發(fā)生,是文件內(nèi)容。文件關閉第一個參數(shù)文件時傳遞的文件描述符第二個參數(shù)回調函數(shù)回調函數(shù)有一個參數(shù)錯誤,關閉文件后執(zhí)行。 showImg(//img.mukewang.com/5d3f890d0001836113660768.jpg); 人所缺乏的不是才干而是志向,不是成功的能力而是勤勞的意志。 —— 部爾衛(wèi) 文章同步到github博客:https:/...

    verano 評論0 收藏0
  • Node.js學習總結

    摘要:表示當前正在執(zhí)行的腳本的文件名。默認編碼為模式為,為回調函數(shù),回調函數(shù)只包含錯誤信息參數(shù),在寫入失敗時返回。參數(shù)使用說明如下通過方法返回的文件描述符。 Node.js回調 Node.js異步編程的直接體現(xiàn)就是回調。 阻塞代碼: const fs = require(fs); let data = fs.readFileSync(input.txt); console.log(data...

    kamushin233 評論0 收藏0
  • Node 基礎學習

    摘要:既然這樣,怎么理解中的單線程再捋一捋和的關系。在線程上,不會等待操作完成,繼續(xù)執(zhí)行后續(xù)的代碼。這就是單線程異步。在中除了代碼,一切都是并行的由于中主任務的執(zhí)行是以單線程的方式進行,如果程序出錯導致崩潰,就會終止整個流程。 node是什么 Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境。 Node.js 使用了一個事件驅動、非阻塞式 I/O 的模...

    alaege 評論0 收藏0
  • Node.js 開發(fā)指南 讀書筆記

    摘要:為指定事件注冊一個監(jiān)聽器,接受一個字符串和一個回調函數(shù)。發(fā)射事件,傳遞若干可選參數(shù)到事件監(jiān)聽器的參數(shù)表。為指定事件注冊一個單次監(jiān)聽器,即監(jiān)聽器最多只會觸發(fā)一次,觸發(fā)后立刻解除該監(jiān)聽器。 1.Node.js 簡介 Node.js 其實就是借助谷歌的 V8 引擎,將桌面端的 js 帶到了服務器端,它的出現(xiàn)我將其歸結為兩點: V8 引擎的出色; js 異步 io 與事件驅動給服務器帶來極高...

    CocoaChina 評論0 收藏0

發(fā)表評論

0條評論

MyFaith

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<