Node.js的文件系统

       Node.js实现文件I/O使用标准的POSIX函数的简单包装。Node文件系统(FS--FileSystem)模块可以使用以下语法输入:

                          var fs = require("fs")

一、同步和异步

    所有文件系统操作都具有同步和异步形式。供开发者选择

异步的形式总是将完成回调作为其最后一个参数。传给完成回调的参数取决于具体方法,但第一个参数始终预留用于异常。如果操作成功完成,则第一个参数是null或undefined。

二、什么是回调?

   所谓“回调”,就是”回头再调”。回调函数并不是马上调用,而是需要等到事件触发了以后再执行。回调是一个异步等效的功能,在完成特定任务后回调函数被调用。

三、FS模块的常用函数:

    1、读文件

        (1)readFile():用于异步读取数据。  - - - - 非阻塞方式读

fs.readFile(fileName, function (err, buffer) {
  if (err) throw err;
   process(buffer);
});

    readFile方法的第一个参数是文件的路径,可以是绝对路径,也可以是相对路径。注意,如果是相对路径,是相对于当前进程所在的路径(process.cwd()),而不是相对于当前脚本所在的路径。

    readFile方法的第二个参数是读取完成后的回调函数。该函数的第一个参数是发生错误时的错误对象,第二个参数是代表文件内容的Buffer实例。

        (2)readFileSync():用于同步读取文件,返回一个字符串。- - - -阻塞方式

var text = fs.readFileSync(fileName, 'utf8');

          readFileSync方法的第一个参数是文件路径,第二个参数可以是一个表示配置的对象,也可以是一个表示文本文件编码的字符串。默认的配置对象是{ encoding: null, flag: 'r' },即文件编码默认为null,读取模式默认为r(只读)。如果第二个参数不指定编码(encoding),readFileSync方法返回一个Buffer实例,否则返回的是一个字符串。

示例:创建一个名为input.txt的文件(内容自定)

var fs = require("fs");

// 异步读
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读: " + data.toString());
});
console.log("Program Ended");
      
// 同步读
var data = fs.readFileSync('input.txt');
console.log("同步读: " + data.toString());
console.log("Program Ended");

这两个例子说明非阻塞阻塞调用的概念。

第一个例子(异步读-非阻塞)程序不等待文件读取,它只是进行打印“Program Ended”,同时程序无阻塞继续读取文件。

第二个例子(同步读-阻塞)直到它读取该文件,然后才前进到结束程序的地方。

    2、打开一个文件在异步模式下打开文件的语法

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

参数的说明:

     path - 文件名,包括路径字符串

     flags - 标志要打开的文件的方式。

     mode - 设置文件模式,但前提是已创建该文件。它默认为0666,读取和写入。

     callback - 这是回调函数,有两个参数(err, fd)。 

flags参数的取值:

示例:

var fs = require("fs");
// 异步 - 打开文件
console.log("Going to open file!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("File opened successfully!");     
});

3、获取文件信息:它产生一个对象,该对象包含了该文件或目录的具体信息。通过该方法,判断正在处理的是一个文件,还是一个目录。

              fs.stat(path, callback)

      参数的说明:

             path - 文件名,包括路径字符串。

             callback - 回调函数得到两个参数(err, stats) 。  

     示例:

var fs = require("fs");
console.log("Going to get file info!");
fs.stat('input.txt', function (err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("Got file info successfully!");
   
   // Check file type
   console.log("isFile ? " + stats.isFile());
   console.log("isDirectory ? " + stats.isDirectory());    
});

     4、写入文件

        (1)writeFile  --- 异步写入文件

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

               如果文件已经存在将会覆盖文件

          参数的说明:

              filename - 文件名,包括路径字符串

              data - 字符串或缓冲区将被写入到文件中

              options - 一个对象,用于指定编码格式。默认编码是UTF8。

              callback - 回调函数获取一个参数err,用于在发生任何写入错误时返回错误。

          示例:      

var fs = require("fs");
console.log("Going to write into existing file");
fs.writeFile('input.txt', 'Simply Easy Learning!',  function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("Data written successfully!");
   console.log("Let's read newly written data");
   fs.readFile('input.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("Asynchronous read: " + data.toString());
   });
});

       (2)writeFileSync:同步写入文件

fs.writeFileSync(fileName, str, 'utf8');

      

 5、读取文件 --- 二进制方式(按字节读取)

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

      参数的说明:

                 fd - 通过文件fs.open()方法返回的文件描述符

           buffer - 被写入数据的缓冲区

           offset - 偏移量,开始写入缓冲区的位置

          length - 整数,指定要读取的字节数

        position - 整数,指定从文件中开始读取。如果位置为null,数据将从当前文件位置读取。

        callback - 回调函数获取三个参数,(err, bytesRead, buffer).

      示例:

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

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to read the file");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + " bytes read");
      
      // Print only read bytes to avoid junk.
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

       6、关闭文件

                       fs.close(fd, callback)

            参数的说明:

                                fd - 这是通过文件fs.open()方法返回的文件描述符。

                     callback - 这是回调函数

            示例:

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

console.log("Going to open an existing file");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("File opened successfully!");
   console.log("Going to read the file");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      // Print only read bytes to avoid junk.
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
      // Close the opened file.
      fs.close(fd, function(err){
         if (err){
            console.log(err);
         } 
         console.log("File closed successfully.");
      });
   });
});

       7、创建目录

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

             参数说明:

                     path - 包括路径的目录名。

                     mode - 要设置的目录权限。

                     callback - 回调函数

              示例:

var fs = require("fs");
console.log("Going to create directory /tmp/test");
fs.mkdir('./tmp',function(err){
   if (err) {
       return console.error(err);
   }
   console.log("Directory created successfully!");
});

       

8、读取目录

                   fs.readdir(path, callback)

     参数说明:

              path - 包括路径的目录名

       callback - 回调函数,两个参数(err, files),其中文件的文件名的目录中的数组排除 '.' 和  '..'

       示例:

var fs = require("fs");
console.log("Going to read directory");
fs.readdir("../buffer",function(err, files){
   if (err) {
       return console.error(err);
   }
   files.forEach( function (file){
       console.log( file );
   });
});

9、删除目录

                fs.rmdir(path, callback)

      参数说明:

             path - 包括路径的目录名。

             callback - 回调函数

      示例:

var fs = require("fs");
console.log("Going to delete directory");
fs.rmdir("../buffer/a1",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("Going to read directory");
   fs.readdir("../buffer",function(err, files){
      if (err) {
          return console.error(err);
      }
      files.forEach( function (file){
          console.log( file );
      });
   });
});

      10、文件复制:

                  fs.copyFile(源文件,目标文件,回调函数)

fs.copyFile('e:/demo.txt','../buffer/deyun/dd.txt',(err)=>{
    if(err){
        return console.log(err)
    }
    console.log('文件复制成功')
})

      11、给文件中追加内容:将内容添加到文件的末尾,若给定的文件不存在则创建文件,创建的新文件名就是给定的文件名

                    fs.appendFile(filename,content,callback)

            参数说明:

                  filename:文件名(含路径)

                  content:内容

                  callback:回调函数

             示例:

fs.appendFile('../buffer/deyun/dd.txt','身体健康!',(err)=>{
    if(err){
        return console.log(err)
    }
    console.log('追加内容成功')
})

       12、删除文件

                     fs.unlink(path, callback)

              参数说明

                           path - 文件路径。

                     callback - 回调函数,没有参数。

               示例:

var fs = require("fs");
var filename = '../buffer/aa.txt';
fs.unlink(filename, function(err) {
   if (err) {
       return console.log('删除失败');
   }
   console.log("删除成功");
});

        13、重命名

                    fs.rename(oldPath, newPath, callback)

               参数说明: 

                 oldPath <String> | <Buffer>

                 newPath <String> | <Buffer>

                 callback <Function> 回调只有一个可能的异常参数

var fs = require("fs");
var filename = '../buffer/aa.txt';
fs.rename(filename,'../buffer/bb.txt',function(err){
    console.log(err);
})

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上庸者-不服周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值