Node.js文件操作方法匯總

字號:


    Node.js和其他語言一樣,也有文件操作。先不說node.js中的文件操作,其他語言的文件操作一般也都是有打開、關閉、讀、寫、文件信息、新建刪除目錄、刪除文件、檢測文件路徑等。在node.js中也是一樣,也都是這些功能,可能就是api與其他語言不太一樣。
    一、同步、異步打開關閉
    /**
     * Created by Administrator on 2016/3/21.
     */
    var fs=require("fs");
    //同步讀 fs.openSync = function(path, flags, mode)
    //模塊fs.js文件中如上面定義的openSync 函數(shù)3個參數(shù)
    //.1.path 文件路徑
    //2.flags 打開文件的模式
    //3.model 設置文件訪問模式
    //fd文件描述
    var fd=fs.openSync("data/openClose.txt",'w');
    //fs.closeSync = function(fd)
    fs.closeSync(fd);
    //異步讀寫
    //fs.open = function(path, flags, mode, callback_)
    //fs.close = function(fd, callback)
    fs.open("data/openColse1.txt",'w',function(err,fd) {
      if (!err)
      {
        fs.close(fd,function(){
          console.log("closed");
        });
      }
    });
    其中的flags其他語言也會有.其實主要分3部分 r、w、a.和C中的差不多。
    1.r —— 以只讀方式打開文件,數(shù)據(jù)流的初始位置在文件開始
    2.r+ —— 以可讀寫方式打開文件,數(shù)據(jù)流的初始位置在文件開始
    3.w ——如果文件存在,則將文件長度清0,即該文件內(nèi)容會丟失。如果不存在,則嘗試創(chuàng)建它。數(shù)據(jù)流的初始位置在文件開始
    4.w+ —— 以可讀寫方式打開文件,如果文件不存在,則嘗試創(chuàng)建它,如果文件存在,則將文件長度清0,即該文件內(nèi)容會丟失。數(shù)據(jù)流的初始位置在文件開始
    5.a —— 以只寫方式打開文件,如果文件不存在,則嘗試創(chuàng)建它,數(shù)據(jù)流的初始位置在文件末尾,隨后的每次寫操作都會將數(shù)據(jù)追加到文件后面。
    6.a+ ——以可讀寫方式打開文件,如果文件不存在,則嘗試創(chuàng)建它,數(shù)據(jù)流的初始位置在文件末尾,隨后的每次寫操作都會將數(shù)據(jù)追加到文件后面。
    二、讀寫
    1.簡單文件讀寫
    /**
     * Created by Administrator on 2016/3/21.
     */
    var fs = require('fs');
    var config = {
      maxFiles: 20,
      maxConnections: 15,
      rootPath: "/webroot"
    };
    var configTxt = JSON.stringify(config);
    var options = {encoding:'utf8', flag:'w'};
    //options 定義字符串編碼 打開文件使用的模式 標志的encoding、mode、flag屬性 可選
    //異步
    //fs.writeFile = function(path, data, options, callback_)
    //同步
    //fs.writeFileSync = function(path, data, options)
    fs.writeFile('data/config.txt', configTxt, options, function(err){
      if (err){
        console.log("Config Write Failed.");
      } else {
        console.log("Config Saved.");
        readFile();
      }
    });
    function readFile()
    {
      var fs = require('fs');
      var options = {encoding:'utf8', flag:'r'};
      //異步
      //fs.readFile = function(path, options, callback_)
      //同步
      //fs.readFileSync = function(path, options)
      fs.readFile('data/config.txt', options, function(err, data){
        if (err){
          console.log("Failed to open Config File.");
        } else {
          console.log("Config Loaded.");
          var config = JSON.parse(data);
          console.log("Max Files: " + config.maxFiles);
          console.log("Max Connections: " + config.maxConnections);
          console.log("Root Path: " + config.rootPath);
        }
      });
    }
    -------------------------------------------------
    "C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe SimpleReadWrite.js
    Config Saved.
    Config Loaded.
    Max Files: 20
    Max Connections: 15
    Root Path: /webroot
    Process finished with exit code 0
    2.同步讀寫
    /**
     * Created by Administrator on 2016/3/21.
     */
    var fs = require('fs');
    var veggieTray = ['carrots', 'celery', 'olives'];
    fd = fs.openSync('data/veggie.txt', 'w');
    while (veggieTray.length){
      veggie = veggieTray.pop() + " ";
      //系統(tǒng)api 
      //fd 文件描述 第二個參數(shù)是被寫入的String或Buffer
      // offset是第二個參數(shù)開始讀的索引 null是表示當前索引
      //length 寫入的字節(jié)數(shù) null一直寫到數(shù)據(jù)緩沖區(qū)末尾
      //position 指定在文件中開始寫入的位置 null 文件當前位置
      // fs.writeSync(fd, buffer, offset, length[, position]);
      // fs.writeSync(fd, string[, position[, encoding]]);
      //fs.writeSync = function(fd, buffer, offset, length, position)
      var bytes = fs.writeSync(fd, veggie, null, null);
      console.log("Wrote %s %dbytes", veggie, bytes);
    }
    fs.closeSync(fd);
    var fs = require('fs');
    fd = fs.openSync('data/veggie.txt', 'r');
    var veggies = "";
    do {
      var buf = new Buffer(5);
      buf.fill();
      //fs.readSync = function(fd, buffer, offset, length, position)
      var bytes = fs.readSync(fd, buf, null, 5);
      console.log("read %dbytes", bytes);
      veggies += buf.toString();
    } while (bytes > 0);
    fs.closeSync(fd);
    console.log("Veggies: " + veggies);
    --------------------------------------------
    "C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe syncReadWrite.js
    Wrote olives 7bytes
    Wrote celery 7bytes
    Wrote carrots 8bytes
    read 5bytes
    read 5bytes
    read 5bytes
    read 5bytes
    read 2bytes
    read 0bytes
    Veggies: olives celery carrots     
    Process finished with exit code 0
    3.異步讀寫 和同步讀寫的參數(shù)差不多就是多了callback
    /**
     * Created by Administrator on 2016/3/21.
     */
    var fs = require('fs');
    var fruitBowl = ['apple', 'orange', 'banana', 'grapes'];
    function writeFruit(fd){
      if (fruitBowl.length){
        var fruit = fruitBowl.pop() + " ";
       // fs.write(fd, buffer, offset, length[, position], callback);
       // fs.write(fd, string[, position[, encoding]], callback);
       // fs.write = function(fd, buffer, offset, length, position, callback)
        fs.write(fd, fruit, null, null, function(err, bytes){
          if (err){
            console.log("File Write Failed.");
          } else {
            console.log("Wrote: %s %dbytes", fruit, bytes);
            writeFruit(fd);
          }
        });
      } else {
        fs.close(fd);
        ayncRead();
      }
    }
    fs.open('data/fruit.txt', 'w', function(err, fd){
      writeFruit(fd);
    });
    function ayncRead()
    {
      var fs = require('fs');
      function readFruit(fd, fruits){
        var buf = new Buffer(5);
        buf.fill();
        //fs.read = function(fd, buffer, offset, length, position, callback)
        fs.read(fd, buf, 0, 5, null, function(err, bytes, data){
          if ( bytes > 0) {
            console.log("read %dbytes", bytes);
            fruits += data;
            readFruit(fd, fruits);
          } else {
            fs.close(fd);
            console.log ("Fruits: %s", fruits);
          }
        });
      }
      fs.open('data/fruit.txt', 'r', function(err, fd){
        readFruit(fd, "");
      });
    }
    ---------------------------------------------
    "C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe asyncReadWrite.js
    Wrote: grapes 7bytes
    Wrote: banana 7bytes
    Wrote: orange 7bytes
    Wrote: apple 6bytes
    read 5bytes
    read 5bytes
    read 5bytes
    read 5bytes
    read 5bytes
    read 2bytes
    Fruits: grapes banana orange apple  
    Process finished with exit code 0
    4.流式讀寫
    /**
     * Created by Administrator on 2016/3/21.
     */
    var fs = require('fs');
    var grains = ['wheat', 'rice', 'oats'];
    var options = { encoding: 'utf8', flag: 'w' };
    //從下面的系統(tǒng)api可以看到 createWriteStream 就是創(chuàng)建了一個writable流
    //fs.createWriteStream = function(path, options) {
    //  return new WriteStream(path, options);
    //};
    //
    //util.inherits(WriteStream, Writable);
    //fs.WriteStream = WriteStream;
    //function WriteStream(path, options)
    var fileWriteStream = fs.createWriteStream("data/grains.txt", options);
    fileWriteStream.on("close", function(){
      console.log("File Closed.");
      //流式讀
      streamRead();
    });
    while (grains.length){
      var data = grains.pop() + " ";
      fileWriteStream.write(data);
      console.log("Wrote: %s", data);
    }
    fileWriteStream.end();
    //流式讀
    function streamRead()
    {
      var fs = require('fs');
      var options = { encoding: 'utf8', flag: 'r' };
      //fs.createReadStream = function(path, options) {
      //  return new ReadStream(path, options);
      //};
      //
      //util.inherits(ReadStream, Readable);
      //fs.ReadStream = ReadStream;
      //
      //function ReadStream(path, options)
      //createReadStream 就是創(chuàng)建了一個readable流
      var fileReadStream = fs.createReadStream("data/grains.txt", options);
      fileReadStream.on('data', function(chunk) {
        console.log('Grains: %s', chunk);
        console.log('Read %d bytes of data.', chunk.length);
      });
      fileReadStream.on("close", function(){
        console.log("File Closed.");
      });
    }
    --------------------------------------------
    "C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe StreamReadWrite.js
    Wrote: oats 
    Wrote: rice 
    Wrote: wheat 
    File Closed.
    Grains: oats rice wheat 
    Read 16 bytes of data.
    File Closed.
    Process finished with exit code 0
    個人覺得像這些api用一用感受一下就ok了,遇到了會用就行了。