Node.js 文件系统相关知识简介说明(一)


摘要:
Node.js通过fs模块提供类似于linux的文件操作API,如下所示:



异步与同步

在Node.js开发语言中,如需使用文件系统,需引用fs模块,此模块中有同步和异步读取文件
在异步读取文件的方法中,提供一个回调函数,异步方法不会对程序产生阻塞

例:
同步和异步读取文件的方法分享

   
    //1 新建文件fileReadTmp.txt 输入以下文件
     node.js教程网:www.maomao365.com

    //2新建fileRead.js 输入以下脚本

     var fs = require("fs");

     //异步读取
     fs.readFile('fileReadTmp.txt', function (err, data) {
        if (err) {
          return console.error(err);
       }
         console.log("read1: " + data.toString());
     });

     //同步读取
     
      var data = fs.readFileSync('fileReadTmp.txt');
      
       console.log("read2: " + data.toString());

 


node.js打开文件方法分享

node.js打开文件采用open方法,语法如下:
fs.open(path,[,mode],callback)
—参数说明—-
path:待读取文件路径
mode:文件打开模式,缺省值为可读可写
callback:文件打开后的回调函数

mode参数说明:

mode

说明
r

使用读取模式打开文件。当文件不存在抛出异常。
r+

使用读写模式打开文件。当文件不存在抛出异常。
rs

使用同步的方式读取文件。
rs+

使用同步的方式读取和写入文件。
w

使用写入模式打开文件,当文件不存在则创建。
wx

类似 ‘w’,当文件路径存在,则文件写入失败。
w+

使用读写模式打开文件,当文件不存在则创建。
wx+

类似 ‘w+’, 当文件路径存在,则文件读写失败。
a

使用追加模式打开文件,当文件不存在则创建。
ax

类似 ‘a’, 当文件路径存在,则文件追加失败。
a+

使用读取追加模式打开文件,当文件不存在则创建。
ax+

类似 ‘a+’, 当文件路径存在,则文件读取追加失败。

例:
使用读写模式打开指定文件


   var fs = require("fs");

   //异步打开文件
  
   console.log("open file start");
   
   fs.open('fileReadTmp.txt', 'r+', function(err, fd) {
      if (err) {
         return console.error(err);
      }
      console.log("success!");     
   });



node.js获取文件相关信息的方法分享

stat函数是node.js中获取文件信息的函数,如下所示:
fs.stat(path,callback)
———-参数说明——
path:
文件路径
callback:
回调函数,回调函数包括(err和stats两个对象)

例:


    var fs = require('fs');
 
     fs.stat('fileReadTmp.txt', function (err, stats) {
          console.log(stats.isFile());         
     })


stats类中的方法有:

方法

说明
stats.isFile()

当前路径所指向为文件时返回 true,否则返回 false
stats.isDirectory()

当前路径所指向为目录时返回 true,否则返回 false
stats.isBlockDevice()

当前路径所指向为块设备时返回 true,否则返回 false
stats.isCharacterDevice()

当前路径所指向为字符设备时返回 true,否则返回 false
stats.isSymbolicLink()

当前路径所指向为软链接时返回 true,否则返回 false
stats.isFIFO()

如果为FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道
stats.isSocket()

如果此路径是一个Socket 返回 true,否则返回 false


 var fs = require("fs");

console.log("open file");
fs.stat('fileReadTmp.txt', function (err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("get file information success");
   
   // 检测文件类型
   console.log("is File ? " + stats.isFile()); 
});



node.js 写入文件

写入文件语法
fs.writeFile(file, data[, options], callback)
—-参数说明————
file:待写入文件名或文件描述符
data:待写入数据,可为字符串和缓冲对象
options:写入属性为为一个json对象,包含{encoding,mode,flag},缺省值为utf-8 flag 为w
callback:写入成功后的回调函数

例:

  var fs = require("fs");

console.log("write file start");
fs.writeFile('fileReadTemp.txt', 'Node.js write',{ 'encoding': 'utf-8' },  function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("write success"); 
   console.log("read file");
   fs.readFile('fileReadTemp.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("file content: " + data.toString());
   });
});


node.js 读取文件

node.js读取文件语法如下:
fs.read(fd, buffer, offset, length, position, callback)
fs.read为异步读取文件的方法
——-参数说明—-
fd:为fs.open返回的文件描述符
buffer:数据写入的缓冲区
offset:数据缓冲区写入的偏移量
length:文件中读取的字节数
position:文件读取的起始位置
callback:文件读取成功的回调函数
例:

    var fs = require("fs");
    var buf = new Buffer.alloc(1024);
 
     console.log("open file");

    fs.open('fileReadTmp.txt', 'r+', function(err, fd) {
       if (err) {
       return console.error(err);
      }
   console.log("open file success");
   console.log("read file:");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + "  byte readed.");
    
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});



node.js 关闭文件

node.js关闭文件语法说明:
fs.close(fd,callback);
——-参数说明——–
fd:
文件打开后的文件描述符
callback:
文件关闭后的回调函数

例:

   var fs = require("fs");
var buf = new Buffer.alloc(1024);

console.log("open file");
fs.open('fileReadTmp.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("open file success");
   console.log("read file:");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + "  byte readed.");
    
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }



      //关闭文件
      fs.close(fd,function(err){
           if(err){}
            console.log('close file success!');
       });
     



   });
});



node.js 文件截取

下文讲述文件截取方法,如下所示
node.js文件截取语法:
fs.ftruncate(fd, len, callback)
——–参数说明——-
fd:文件被打开后的文件描述符
len:文件内容截取长度
callback:截取操作完毕后的回调函数
例:

   var fs = require("fs");
var buf = new Buffer.alloc(1024);

console.log("open file");
fs.open('fileReadTmp.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
    
   fs.ftruncate(fd,10,function(err){});

   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + "  byte readed.");
    
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }

      fs.close(fd,function(err){
           if(err){}
            console.log('close file success!');
       });
     
   });
});
 


node.js 删除文件

node.js删除文件语法
fs.unlink(path, callback)
—-参数说明—-
path:文件路径
callback:回调函数
例:

    var fs = require("fs");
 
    fs.unlink('fileReadTemp.txt', function(err) {
        if (err) {
            return console.error(err);
        }
       console.log("del success");
    });