Node.js 文件系统

Node.js 提供相同组看似 UNIX(POSIX)标准的公文操作API。 Node
导入文件系统模块(fs)语法如下所示:

var fs = require("fs")

异步和齐

Node.js 文件系统(fs
模块)模块中之章程都产生异步和旅版本,例如读取文件内容之函数有异步的
fs.readFile() 和一块的 fs.readFileSync()。

异步的措施函数最后一个参数为回调函数,回调函数的首先只参数包含了错误信息(error)。

提议大家是因此异步方法,比从一道,异步方法性能更胜,速度更快,而且从不死。

开辟文件

语法

以下为在异步模式下开拓文件之语法格式:

fs.open(path, flags[, mode], callback)

参数

参数使用验证如下:

  • path – 文件之路子。

  • flags – 文件打开的行。具体值详见下文。

  • mode – 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。

  • callback – 回调函数,带有两只参数如:callback(err, fd)。

flags 参数可以是因下值:

flag 描述
r 以读取模式打开文件。如果文件不存在抛出异常。
r+ 以读写模式打开文件。如果文件不存在抛出异常。
rs 以同步的方式读取文件。
rs+ 以同步的方式读取和写入文件。
w 以写入模式打开文件,如果文件不存在则创建。
wx 类似 ‘w’,但是如果文件路径存在,则文件写入失败。
w+ 以读写模式打开文件,如果文件不存在则创建。
wx+ 类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。
a 以追加模式打开文件,如果文件不存在则创建。
ax 类似 ‘a’, 但是如果文件路径存在,则文件追加失败。
a+ 以读取追加模式打开文件,如果文件不存在则创建。
ax+ 类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实例

接通下去我们创建 file.js 文件,并打开 input.txt
文件进行读写,代码如下所示:

var fs = require("fs");

// 异步打开文件
console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("文件打开成功!");     
});

以上代码执行结果如下:

node file.js 
准备打开文件!
文件打开成功!

取文件信息

语法

以下为经异步模式得到文件信息之语法格式:

fs.stat(path, callback)

参数

参数使用验证如下:

  • path – 文件路径。

  • callback – 回调函数,带有两单参数如:(err, stats), stats 是
    fs.Stats 对象。

fs.stat(path)执行后,会以stats类的实例返回给那回调函数。可以由此stats类中的提供方判断文件的相干属性。例如判断是否也文件:

var fs = require('fs');

fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) {
    console.log(stats.isFile());         //true
})

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。

 

 

 

 

 

 

描绘副文件

语法

以下为异步模式下写副文件之语法格式:

fs.writeFile(file, data[, options], callback)

如文件是,该法勾勒副的情会挂旧的公文内容。

参数

参数使用验证如下:

  • file – 文件称或文件讲述称。

  • data – 要描写副文件之数据,可以是 String(字符串) 或 Buffer(流)
    对象。

  • options – 该参数是一个目标,包含 {encoding, mode,
    flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’

  • callback –
    回调函数,回调函数只含错误信息参数(err),在写入失败时回来。

实例

接下去我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

console.log("准备写入文件");
fs.writeFile('input.txt', '我是通过写入的文件内容!',  function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("数据写入成功!");
   console.log("--------我是分割线-------------")
   console.log("读取写入的数据!");
   fs.readFile('input.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("异步读取文件数据: " + data.toString());
   });
});

上述代码执行结果如下:

$ node file.js 
准备写入文件
数据写入成功!
--------我是分割线-------------
读取写入的数据!
异步读取文件数据: 我是通过写入的文件内容

读取文件

语法

以下也异步模式下读取文件之语法格式:

fs.read(fd, buffer, offset, length, position, callback)

拖欠办法应用了文本讲述符来读取文件。

参数

参数使用验证如下:

  • fd – 通过 fs.open() 方法返回的文件讲述吻合。

  • buffer – 数据写入的缓冲区。

  • offset – 缓冲区勾勒副的状副偏移量。

  • length – 要起文本被读取的字节数。

  • position – 文件读取的苗子位置,如果 position 的价为
    null,则会自眼前文件指针的岗位读取。

  • callback – 回调函数,有三独参数err, bytesRead, buffer,err
    为错误信息, bytesRead 代表读取的字节数,buffer 为缓冲区目标。

实例

input.txt 文件内容为:

菜鸟教程官网地址:www.runoob.com

连接下去我们创建 file.js 文件,代码如下所示:

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

console.log("准备打开已存在的文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   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(buf.slice(0, bytes).toString());
      }
   });
});

以上代码执行结果如下:

$ node file.js 
准备打开已存在的文件!
文件打开成功!
准备读取文件:
42  字节被读取
菜鸟教程官网地址:www.runoob.com

 

关闭文件

语法

以下也异步模式下关闭文件的语法格式:

fs.close(fd, callback)

该方式运用了文件讲述符来读取文件。

参数

参数使用说明如下:

  • fd – 通过 fs.open() 方法返回的公文讲述称。

  • callback – 回调函数,没有参数。

实例

联网下我们创建 file.js 文件,代码如下所示:

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

console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("准备读取文件!");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }

      // 仅输出读取的字节
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }

      // 关闭文件
      fs.close(fd, function(err){
         if (err){
            console.log(err);
         } 
         console.log("文件关闭成功");
      });
   });
});

上述代码执行结果如下:

$ node file.js 
准备打开文件!
文件打开成功!
准备读取文件!
菜鸟教程官网地址:www.runoob.com
文件关闭成功

截取文件

语法

以下为异步模式下截取文件之语法格式:

fs.ftruncate(fd, len, callback)

欠方法应用了文件讲述符来读取文件。

参数

参数使用验证如下:

  • fd – 通过 fs.open() 方法返回的文书讲述吻合。

  • len – 文件内容截取的长短。

  • callback – 回调函数,没有参数。

    var fs = require(“fs”);
    var buf = new Buffer(1024);

    console.log(“准备打开文件!”);
    fs.open(‘input.txt’, ‘r+’, function(err, fd) {
    if (err) {

       return console.error(err);
    

    }
    console.log(“文件打开成!”);
    console.log(“截取10许节后的文本内容。”);

    // 截取文件
    fs.ftruncate(fd, 10, function(err){

      if (err){
         console.log(err);
      } 
      console.log("文件截取成功。");
      console.log("读取相同的文件"); 
      fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
         if (err){
            console.log(err);
         }
    
         // 仅输出读取的字节
         if(bytes > 0){
            console.log(buf.slice(0, bytes).toString());
         }
    
         // 关闭文件
         fs.close(fd, function(err){
            if (err){
               console.log(err);
            } 
            console.log("文件关闭成功!");
         });
      });
    

    });
    });

以上代码执行结果如下:

$ node file.js 
准备打开文件!
文件打开成功!
截取10字节后的文件内容。
文件截取成功。
读取相同的文件
site:www.r
文件关闭成功

除去文件

语法

以下为除去文件之语法格式:

fs.unlink(path, callback)

参数

参数使用验证如下:

  • path – 文件路径。

  • callback – 回调函数,没有参数。

    var fs = require(“fs”);

    console.log(“准备去文件!”);
    fs.unlink(‘input.txt’, function(err) {
    if (err) {

       return console.error(err);
    

    }
    console.log(“文件去成功!”);
    });

以上代码执行结果如下:

node file.js 
准备删除文件!
文件删除成功!

始建目录

语法

以下为创造目录的语法格式:

fs.mkdir(path[, mode], callback)

参数

参数使用说明如下:

  • path – 文件路径。

  • mode – 设置目录权限,默认为 0777。

  • callback – 回调函数,没有参数。

实例

对接下我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

console.log("创建目录 /tmp/test/");
fs.mkdir("/tmp/test/",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("目录创建成功。");
});

以上代码执行结果如下:

$ node file.js 
创建目录 /tmp/test/
目录创建成功。

读取目录

语法

以下为读取目录的语法格式:

fs.readdir(path, callback)

参数

参数使用验证如下:

  • path – 文件路径。

  • callback – 回调函数,回调函数带有两只参数err, files,err
    为错误信息,files 为 目录下的文本数组列表。

实例

属下我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

console.log("查看 /tmp 目录");
fs.readdir("/tmp/",function(err, files){
   if (err) {
       return console.error(err);
   }
   files.forEach( function (file){
       console.log( file );
   });
});

以上代码执行结果如下:

$ node file.js 
查看 /tmp 目录
input.out
output.out
test
test.txt

除去目录

语法

以下为除去目录的语法格式:

fs.rmdir(path, callback)

参数

参数使用验证如下:

  • path – 文件路径。

  • callback – 回调函数,没有参数。

实例

连片下去我们创建 file.js 文件,代码如下所示:

var fs = require("fs");
// 执行前创建一个空的 /tmp/test 目录
console.log("准备删除目录 /tmp/test");
fs.rmdir("/tmp/test",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("读取 /tmp 目录");
   fs.readdir("/tmp/",function(err, files){
      if (err) {
          return console.error(err);
      }
      files.forEach( function (file){
          console.log( file );
      });
   });
});

如上代码执行结果如下:

$ node file.js 
准备删除目录 /tmp/test
读取 /tmp 目录
……