首页 > 编程语言 >无涯教程-Node.js - IO系统

无涯教程-Node.js - IO系统

时间:2024-01-21 11:32:05浏览次数:35  
标签:Node fs console log err 无涯 js main

Node使用围绕标准POSIX函数的简单包装器来实现文件I/O,可以使用以下语法导入节点文件系统(fs)模块-

var fs=require("fs")

同步与异步

fs模块中的每个方法都有同步形式和异步方式,异步方法将最后一个参数作为完成函数回调,并将回调函数的第一个参数作为错误。最好使用异步方法而不是同步方法,因为前者在执行过程中从不阻塞程序,而后者则不会。

创建一个名为 input.txt 的文本文件,其内容如下:

Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

让无涯教程用以下代码创建一个名为 main.js 的js文件-

var fs=require("fs");

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

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

console.log("Program Ended");

现在运行main.js以查看输出-

$node main.js

验证输出。

Synchronous read: Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

Program Ended
Asynchronous read: Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

本章的以下各节提供了一组有关主要文件I/O方法的良好示例。

打开文件

以下是在异步模式下打开文件的方法的语法-

fs.open(path, flags[, mode], callback)
  • path        - 这是文件名包含路径的字符串。

  • flags        - 标志指示要打开的文件的行为。

  • mode      - 设置文件模式(权限),但仅在创建文件时才设置,默认值为0666,可读可写。

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

Sr.No. Flag & 描述
1

r

打开文件进行读取,如果文件不存在,则会发生异常。

2

r +

打开文件进行读写,如果文件不存在,则会发生异常。

3

rs

打开文件以同步模式读取。

4

rs +

打开文件进行读写,要求操作系统同步打开它。请参阅有关" rs"的注意事项,以谨慎使用它。

5

w

打开文件进行写入。文件已创建(如果不存在)或被清空(如果存在)。

6

wx

类似于" w",但如果路径存在则失败。

7

w +

打开文件进行读写。文件已创建(如果不存在)或被清空(如果存在)。

8

wx +

类似于" w +",但如果存在路径则失败。

9

a

打开文件进行追加。如果文件不存在,则创建该文件。

10

ax

类似于" a",但如果路径存在则失败。

11

a +

打开文件以进行读取和附加。如果文件不存在,则创建该文件。

12

ax +

类似于" a +",但如果路径存在则失败。

让无涯教程创建一个名为 main.js 的js文件,该文件具有以下代码,以打开文件input.txt进行读写。

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!");     
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to open file!
File opened successfully!

获取文件信息

以下是获取有关文件信息的方法的语法-

fs.stat(path, callback)
  • path       - 这是文件名包含路径的字符串。

  • callback - 这是回调函数,它获取两个参数(err,stats),其中 stats 是fs.Stats类型的对象,显示在下面在示例中。

除了下面示例中显示的重要属性外, fs.Stats 类中还有几种有用的方法可用于检查文件类型。下表列出了这些方法。

Sr.No. Method & 描述
1

stats.isFile()

如果简单文件的文件类型,则返回true。

2

stats.isDirectory()

如果目录的文件类型,则返回true。

3

stats.isBlockDevice()

如果块设备的文件类型返回true。

4

stats.isCharacterDevice()

如果字符设备的文件类型返回true。

5

stats.isSymbolicLink()

如果符号链接的文件类型返回true。

6

stats.isFIFO()

如果FIFO的文件类型,则返回true。

7

stats.isSocket()

如果asocket的文件类型,则返回true。

让无涯教程用以下代码创建一个名为 main.js 的js文件-

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!");
   
   //检查文件类型
   console.log("isFile ? " + stats.isFile());
   console.log("isDirectory ? " + stats.isDirectory());    
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to get file info!
{ 
   dev: 1792,
   mode: 33188,
   nlink: 1,
   uid: 48,
   gid: 48,
   rdev: 0,
   blksize: 4096,
   ino: 4318127,
   size: 97,
   blocks: 8,
   atime: Sun Mar 22 2020 13:40:00 GMT-0500 (CDT),
   mtime: Sun Mar 22 2020 13:40:57 GMT-0500 (CDT),
   ctime: Sun Mar 22 2020 13:40:57 GMT-0500 (CDT) 
}
Got file info successfully!
isFile ? true
isDirectory ? false

写入文件

以下是写入文件的方法之一的语法-

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

这是使用的参数的描述-

  • path        - 这是文件名包含路径的字符串。

  • data         - 这是要写入文件的字符串或缓冲区。

  • options   - 第三个参数是一个对象,它将保存{encoding,mode,flag},默认。编码为utf8,模式为八进制值0666。标志为" w"

  • callback  - 这是一个回调函数,它获得单个参数err,如果出现任何写入错误,该参数将返回错误。

让无涯教程创建一个名为 main.js 的js文件,其中包含以下代码-

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());
   });
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to write into existing file
Data written successfully!
Let's read newly written data
Asynchronous read: Simply Easy Learning!

读取文件

以下是从文件读取的方法之一的语法-

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

这是使用的参数的描述-

  • fd           - 这是fs.open()返回的文件描述符。

  • buffer    - 这是将要写入数据的缓冲区。

  • offset     - 这是缓冲区中开始写入的偏移量。

  • length    - 这是一个整数,指定要读取的字节数。

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

  • callback - 这是回调函数,它获取三个参数(err,bytesRead,buffer)。

让无涯教程用以下代码创建一个名为 main.js 的js文件-

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");
      
      //只打印读取的字节以避免垃圾字节。
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to open an existing file
File opened successfully!
Going to read the file
97 bytes read
Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

关闭文件

以下是关闭打开的文件的语法-

fs.close(fd, callback)

这是使用的参数的描述-

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

  • callback - 这是回调函数。除了可能的异常以外,没有其他参数被赋予完成回调。

让无涯教程创建一个名为 main.js 的js文件,其中包含以下代码-

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);
      }

      if(bytes > 0) {
         console.log(buf.slice(0, bytes).toString());
      }

      //关闭打开的文件。
      fs.close(fd, function(err) {
         if (err) {
            console.log(err);
         } 
         console.log("File closed successfully.");
      });
   });
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to open an existing file
File opened successfully!
Going to read the file
Learnfk Point is giving self learning content
to teach the world in simple and easy way!!!!!

File closed successfully.

截断文件

以下是截断打开的文件的方法的语法-

fs.ftruncate(fd, len, callback)

这是使用的参数的描述-

  • fd             - 这是fs.open()返回的文件描述符。

  • len           - 这是文件的长度,之后文件将被截断。

  • callback  - 这是回调函数。除了可能的异常以外,没有其他参数被赋予完成回调。

让无涯教程创建一个名为 main.js 的js文件,其中包含以下代码-

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 truncate the file after 10 bytes");
   
   //截断打开的文件。
   fs.ftruncate(fd, 10, function(err) {
      if (err) {
         console.log(err);
      } 
      console.log("File truncated successfully.");
      console.log("Going to read the same file"); 
      
      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("File closed successfully.");
         });
      });
   });
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to open an existing file
File opened successfully!
Going to truncate the file after 10 bytes
File truncated successfully.
Going to read the same file
Learnfk 
File closed successfully.

删除文件

以下是删除文件的方法的语法-

fs.unlink(path, callback)

这是使用的参数的描述-

  • path        - 这是包含路径的文件名。

  • callback - 这是回调函数。除了可能的异常以外,没有其他参数被赋予完成回调。

让无涯教程创建一个名为 main.js 的js文件,其中包含以下代码-

var fs=require("fs");

console.log("Going to delete an existing file");
fs.unlink('input.txt', function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("File deleted successfully!");
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to delete an existing file
File deleted successfully!

创建目录

以下是创建目录的方法的语法-

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

这是使用的参数的描述-

  • path        - 这是包含路径的目录名称。

  • mode      - 这是要设置的目录权限,默认值为0777。

  • callback  - 这是回调函数。除了可能的异常以外,没有其他参数被赋予完成回调。

让无涯教程创建一个名为 main.js 的js文件,其中包含以下代码-

var fs=require("fs");

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

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to create directory /tmp/test
Directory created successfully!

读取目录

以下是读取目录的方法的语法-

fs.readdir(path, callback)

这是使用的参数的描述-

  • path       - 这是包含路径的目录名称。

  • callback - 这是回调函数,它获取两个参数(err,files),其中files是目录中文件名的数组,不包括"."和" .."。

让无涯教程创建一个名为 main.js 的js文件,其中包含以下代码-

var fs=require("fs");

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

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test
test.txt

删除目录

以下是删除目录的方法的语法-

fs.rmdir(path, callback)

这是使用的参数的描述-

  • path       - 这是包含路径的目录名称。

  • callback - 这是回调函数。除了可能的异常以外,没有其他参数被赋予完成回调。

让无涯教程创建一个名为 main.js 的js文件,其中包含以下代码-

var fs=require("fs");

console.log("Going to delete directory /tmp/test");
fs.rmdir("/tmp/test",function(err) {
   if (err) {
      return console.error(err);
   }
   console.log("Going to read directory /tmp");
   
   fs.readdir("/tmp/",function(err, files) {
      if (err) {
         return console.error(err);
      }
      files.forEach( function (file) {
         console.log( file );
      });
   });
});

现在运行main.js以查看输出-

$node main.js

验证输出。

Going to read directory /tmp
ccmzx99o.out
ccyCSbkF.out
employee.ser
hsperfdata_apache
test.txt

参考链接

https://www.learnfk.com/nodejs/nodejs-file-system.html

标签:Node,fs,console,log,err,无涯,js,main
From: https://blog.51cto.com/u_14033984/9355204

相关文章

  • 无涯教程-Node.js - Buffers
    纯JavaScript是Unicode友好的,但是对于二进制数据却不是,在处理TCP流或文件系统时,必须处理八位位组流,Node提供了Buffer类,该类提供了实例来存储类似于整数数组的原始数据,但对应于V8堆外部的原始内存分配。缓冲区类是全局类,可以在应用程序中访问而无需导入缓冲区模块。创建缓冲区......
  • 无涯教程-Node.js - Streams
    Stream流是使您可以连续地从源读取数据或将数据写入目标的对象,在Node.js中,有四种类型的流-Readable  - 用于读取操作的流。Writable   - 用于写操作的流。Duplex    - 可用于读取和写入操作的流。Transform -一种双工流,其中基于输入来计算输出......
  • node-red__function_1
               ......
  • 关于使用SSM+JSP开发时setter、getter隐式调用问题的小结
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/17977495出自【进步*于辰的博客】之前使用SSM+JSP做网站开发,由于没有注意setter、getter的隐式调用问题,出现了多次bug,对开发进度影响挺大。因此,特来作这篇文章跟大家分享,帮......
  • 序列化之@JsonComponent、@JsonInclude、@JsonSerialize、@JsonIgnore、JsonProperty
    前言:很多时候,例如前端需要字段user可能只是需要用到user中的userName属性,而后端传过去的却是一整个user对象,这样显然是不行的。那有没有一种技术,可以把后端传给前端的user类型的值改变为userName类型的值呢?@JsonComponent、@JsonInclude、@JsonSerialize可以在序列化的时候动手脚,可......
  • 无涯教程-MATLAB - Octave
    GNUOctave是像MATLAB这样的高级编程语言,它与MATLAB大部分兼容。它也用于数值计算。Octave与MATLAB具有以下共同特征-矩阵是基本数据类型它具有对复数的内置支持它具有内置的数学函数和库它支持用户定义的函数GNUOctave也是可免费重新发行的软件,您可以根据自由软件基金会......
  • 无涯教程-MATLAB - 变换(Transforms)
    MATLAB提供了用于处理变换的命令,例如Laplace和Fourier变换,转换在科学和工程中用作简化分析并从另一个角度查看数据的工具。例如,傅立叶变换允许我们将表示为时间函数的信号转换为频率函数,拉普拉斯变换使我们能够将微分方程转换为代数方程。MATLAB提供了laplace,傅立叶和fft命......
  • 无涯教程-MATLAB - 多项式(Polynomials)
    MATLAB将多项式表示为行向量,其中包含按降序排序的系数。例如,方程P(x)=x4+7x3-5x+9可以表示为-p=[170-59];判断多项式polyval函数用于以指定值判断多项式。例如,要判断我们先前的多项式p,在x=4处,键入-p=[170-59];polyval(p,4)MATLAB执行上述语句并返......
  • 无涯教程-MATLAB - 代数(Algebra)
    到目前为止,我们已经看到所有示例都可以在MATLAB及其GNU(也称为Octave)中运行,但是对于求解基本的代数方程,MATLAB和Octave几乎没有什么不同,因此我们将尝试在单独的部分中介绍MATLAB和Octave。我们还将讨论代数表达式的分解和简化。MATLAB中代数方程solve函数用于求解代数方程,......
  • 无涯教程-MATLAB - 微积分(Calculus)
    MATLAB提供了多种方法来解决微分和积分问题,求解任意程度的微分方程式以及计算极限,最重要的是,您可以轻松求解复杂函数的图,并通过求解原始函数及其导数来检查图上的最大值,最小值。本章将讨论微积分的问题,在本章中,我们将讨论预演算的概念,即计算函数的极限并验证极限的性质。计算极......