Node.js常用模块之fs

本文介绍了NodeJS的fs模块,它全称file system,是重要的文件操作API。该模块方法有同步和异步两种方式,并说明了不同场景下的使用选择。还详细阐述了fs模块的常用操作,如打开、关闭、读写文件,获取文件信息,修改文件名等。
fs 模块简介

全称是file system(文件系统),它是NodeJS提供的文件操作API,用于对系统文件及目录进行读写操作,是一个非常重要的模块,对文件的操作都基于它。

该模块的所有方法都有同步和异步两种方式。
明确:

  • 使用异步代码 :需要在服务器运行期反复执行业务逻辑的代码。
    原因:同步代码在执行时期,服务器将停止响应,因为 Node.js 是单线程。
  • 使用同步代码 :服务器启动时如果需要读取配置文件,或者结束时需要写入到状态文件时。
    原因:这些代码只在启动和结束时执行一次,不影响服务器正常运行时的异步执行。
fs 模块的常用操作

前置知识 :

  • 文件的权限位 mode
权限项执行无权限
字符表示rwx-
数字表示4210
  • 标识位 flag
    代表着对文件的操作方式,如可读、可写、既可读又可写等
参数说明
‘a’打开文件用于追加。如果文件不存在,则创建该文件。
‘ax’与 ‘a’ 相似,但如果路径存在则失败。
‘a+’打开文件用于读取和追加。如果文件不存在,则创建该文件。
‘ax+’与 ‘a+’ 相似,但如果路径存在则失败。
‘as’以同步模式打开文件用于追加。如果文件不存在,则创建该文件。
‘as+’以同步模式打开文件用于读取和追加。如果文件不存在,则创建该文件。
‘r’打开文件用于读取。如果文件不存在,则会发生异常。
‘r+’打开文件用于读取和写入。如果文件不存在,则会发生异常。
‘rs+’以同步模式打开文件用于读取和写入。指示操作系统绕开本地文件系统缓存。这对于在 NFS 挂载上打开文件非常有用,因为它允许跳过可能过时的本地缓存。 它对 I/O 性能有非常实际的影响,因此除非需要,否则不建议使用此标志。这不会将 fs.open() 或 fsPromises.open() 转换为同步的阻塞调用。 如果需要同步操作,则应使用 fs.openSync() 之类的操作。
‘w’打开文件用于写入。创建文件(如果它不存在)或截断文件(如果存在)。
‘wx’与 ‘w’ 相似,但如果路径存在则失败。
‘w+’打开文件用于读取和写入。创建文件(如果它不存在)或截断文件(如果存在)。
‘wx+’与 ‘w+’ 相似,但如果路径存在则失败。
  • 文件描述符 fd
    操作系统为每个 打开的 文件分配的一个数值标识,文件操作时用它来识别与追踪每个特定的文件
    记忆技巧:
    将mode理解为名词,flag理解为动词。

    “+” :取反

    “x” : 排他

    “s” : 同步

    “a”:追加

导入fs:

var fs = require("fs");
1、打开文件

异步打开文件的语法格式为:

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

参数说明:

path:文件的路径

flags:文件操作方式。

mode:设置文件模式(权限)。

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

同步打开文件的语法格式为:

fs.openSync(path, flags[, mode])
2、关闭文件

异步关闭文件的语法格式为:

fs.close(fd, callback);

参数说明:

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

callback:回调函数,除了可能的异常,完成回调没有其他参数。

3、读文件

异步读取文件的语法格式为:

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

参数说明:

buffer:是数据写入的缓冲区。

offset:指定要写入的 buffer 位置。一般它的值我们写为 0。

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

position:指定从文件中开始读取的位置。 如果 position 为 null,则从当前文件位置读取数据,并更新文件位置。

callback:回调函数,有三个参数 err, bytesRead, buffer。

  • err 为错误信息
  • bytesRead 表示读取的字节数
  • buffer 为缓冲区对象。
4、写文件

异步写入文件的语法格式为:

fs.write(fd, buffer, offset, length, position, callback);

参数说明:

length:是一个整数,指定要写入的字节数。

position 指定应该写入此数据的文件开头的偏移量。 如果 typeof position !== ‘number’,则从当前位置写入数据。

callback:回调有三个参数 (err, bytesWritten, buffer),其中 bytesWritten 指定从 buffer 写入的字节数。

fs.read 和 fs.write 需要结合 fs.open 得到文件句柄来使用,我们再介绍另外一种读写方式。

3(2)、用fs.readFile异步读取文件:
fs.readFile(path,[options], callback);

参数说明:

options:该参数是一个对象,包含{encoding,flag}。

  • encoding 默认值为 null

  • flag 默认值为 ‘r’。

callback:回调有两个参数 (err, data),其中 data 为要写入文件的数据。

4(2)、用fs.writeFile异步写入文件:
fs.writeFile(file, data,[options], callback);

参数说明:

file:文件名或文件描述符。
data:要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
options:该参数是一个对象,包含 {encoding, mode, flag}。

  • encoding 默认值为:‘utf8’
  • mode 默认值为 0o666
  • flag 默认为 ‘w’。

callback:回调有一个参数 err。

注:异步追加内容还有一个专门的方法叫fs.appendFile。

5、获取文件信息

异步获取文件信息的格式为:

fs.stat(path, callback);

参数说明:

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

可以通过 stats 中提供d的方法判断文件的相关属性。

6、异步截取文件

异步截取文件的格式为:

fs.ftruncate(fd[, length], callback);

参数说明:

length:文件内容截取的长度,默认为 0。

callback:除了可能的异常,完成回调没有其他参数。

7、修改文件名

异步的修改文件名的语法为:

fs.rename(oldPath, newPath, callback);

参数说明:

oldPath:原来的文件名字。

newPath:新的文件名字。

callback:回调函数,除了可能的异常,完成回调没有其他参数。

8、删除文件

异步删除文件的语法格式为:

fs.unlink(path, callback);

参数说明:

callback: 除了可能的异常,完成回调没有其他参数。

9、新建目录

异步创建目录的语法为:

fs.mkdir(path[, options], callback);

参数说明:

options:有两个参数。

  • recursive 表示是否以递归的方式创建目录,默认为 false。

  • mode 设置目录权限,Windows 上不支持。默认为 0o777。

callback:回调函数,除了可能的异常,完成回调没有其他参数。

10、读取目录

异步读取目录的语法为:

fs.readdir(path[, options], callback);

参数说明:

options:有两个参数 encoding,withFileTypes。

  • encoding 默认值为 ‘utf8’

  • withFileTypes 默认值为 false。

callback : 回调函数,有两个参数 err, files。files 为目录下的文件数组列表。

11、删除目录

异步删除目录的语法为:

fs.rmdir(path, callback);

参数说明:

callback:回调函数,除了可能的异常,完成回调没有其他参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值