node.js常用内置模块--File System

File System表示文件系统, fs为它的缩写。这里只简单使用常用的方法,更多的使用方法请参阅官网File System。

对于文件的操作,大多数API都提供了三种方式:

  • 同步操作文件:代码会被阻塞,不会继续执行;
  • 异步回调函数操作文件:代码不会被阻塞,需要传入回调函数,当获取到结果时,回调函数被执行;
  • 异步Promise操作文件:代码不会被阻塞,通过 fs.promises 调用方法操作,会返回一个Promise,可以通过then、catch进行处理;
    所有文件系统操作都有同步、回调和基于Promise的表单。

一、 引入方式

const fs = require('fs')

二、文件三种操作方式

假设有一个名为 temp.txt的文件,里面内容为:

Hello Passer! Let's learn node.js File System !
  • 同步操作文件(代码会被阻塞,不会继续执行)
const state = fs.statSync('./temp.txt')
console.log(state);
console.log('--------分割线--------');
  • 异步回调函数操作文件(代码不会被阻塞,需要传入回调函数,当获取到结果时,回调函数被执行;)
fs.stat('./temp.txt', (err, state) => {
   if (err) {
      console.log(err);
      return
   }
   console.log(state);
})
console.log('--------分割线--------');
  • 异步Promise操作文件(代码不会被阻塞,通过 fs.promises 调用方法操作,会返回一个Promise,可以通过then、catch进行处理;)
fs.promises.stat('./temp.txt').then(state => {
   console.log(state);
}).catch(er => {
   console.log(err);
})

console.log('--------分割线--------');

三、文件描述符

Node.js 抽象出操作系统之间的特定差异,并为所有打开的文件分配一个数字型的文件描述符,一旦被分配,则文件描述符可用于从文件读取数据、向文件写入数据、或请求关于文件的信息。
获取文件描述符的方法: fs.open()

// 获取文件描述符
fs.open('./temp.txt', 'r', (err, fd) => {
   console.log(fd);//30
})

当获取到文件描述符以后可以根据描述符读取文件信息

 // 根据文件描述符读取文件信息
 fs.fstat(30, (err, state) => {
     console.log(state)
  })

四、操作文件内容

我们要操作文件的内容,则需要借助一下API来实现:

  • fs.readFile(path[, options], callback):读取文件的内容;

  • fs.writeFile(file, data[, options], callback):在文件中写入内容;

1. 文件读取
// 文件读取
fs.readFile('./temp.txt', (err, data) => {
   console.log(data); //

读取文件options可以接收encoding用于设置读取文件的内容编码方式,这也就是为什么上面的输出是Buffer。

设置读取文件内容的编码方式

fs.readFile('./temp.txt',{encoding:'utf-8'}, (err, data) => {
   console.log(data); //Hello Passer! Let's learn node.js File System !
})

2. 文件写入
fs.writeFile('./temp.txt', 'hahaha', {flag: 'w+'}, err => {
   if (err) {
      console.log('写入文件失败=', err);
   } else {
      console.log('写入文件成功');
   }
})

hahaha为写入文件里面的内容,上面的方式会把原来的文件的内容覆盖。原因是{flag: 'w+'}.

flag的值有很多:快速查看

  • w 打开文件写入,默认值;
  • w+打开文件进行读写,如果不存在则创建文件;
  • r+ 打开文件进行读写,如果不存在那么抛出异常;
  • r打开文件读取,读取时的默认值;
  • a打开要写入的文件,将流放在文件末尾。如果不存在则创建文件;
  • a+打开文件以进行读写,将流放在文件末尾。如果不存在则创建文件

五、文件夹的操作

1. 创建文件夹

创建文件夹可以使用fs.mkdir()或者fs.mkdirSync()
比如创建一个名为home的文件夹,

const dirName = './home'
// 判断是否存在这个文件夹
if (!fs.existsSync(dirName)) {
   //创建文件夹
   fs.mkdir(dirName, er => {
      console.log(er);
   })
} else {
   console.log('已经存在了');
}

fs.existsSync(dirName)是判断这个文件夹是否已经存在

2.读取文件夹的内容

读取文件夹的内容可以使用fs.readdir(path[, options], callback)或者fs.readdirSync(path[, options])

//获取文件夹下的所有文件不包含子文件夹的文件
fs.readdir(dirName,{ withFileTypes: true }, (err, files) =>{
   console.log(files); //[ Dirent { name: 'eeee.js', [Symbol(type)]: 1 } ]
})

3.文件夹的重命名

文件夹的重命名使用 fs.rename(oldPath, newPath, callback)或者fs.renameSync(oldPath, newPath)

fs.rename(dirName, './passer33', er => {
   console.log(er);
})

这里就把原来的home改名为passer33.

这里只简单使用常用的方法,更多的使用方法请参阅官网File System。

你可能感兴趣的:(node.js常用内置模块--File System)