美文网首页
node.js常用内置模块--File System

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

作者: 31313_iOS | 来源:发表于2020-12-17 18:15 被阅读0次

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); //<Buffer 48 65 6c 6c 6f 20 50 61 73 73 65 72 21 20 4c 65 74 27 73 20 6c 65 61 72 6e 20 6e 6f 64 65 2e 6a 73 20 46 69 6c 65 20 53 79 73 74 65 6d 20 21>

读取文件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

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

  • node.js - 收藏集 - 掘金

    Node.js fs 模块的文件操作 API 介绍 - 前端 - 掘金1.File System 模块概述 Nod...

  • 前端文章精选- 收藏集 - 掘金

    Node.js fs 模块的文件操作 API 介绍 - 前端 - 掘金1.File System 模块概述 Nod...

  • node.js day3 系统模块(2019.6.2)

    node.js系统模块 1.file system 文件系统 fs 使用:var fs = require(‘f...

  • Node.js 文件系统

    Node.js 使用 fs(File System)模块来操作文件。文件系统模块有两种不同的方法:同步/异步方法。...

  • Node.js HTTP模块

    内置HTTP模块 Node.js 中有 HTTP 这个内置模块,HTTP 模块允许 Node.js 通过超文本传输...

  • node系统模块

    node.js系统模块 1.file system 文件系统 fs 使用: 2.fs.Dirent 类 1)dir...

  • Node.js常用的内置模块

    常用的内置模块(path,fs,url,querystring,) Node.js中提供了一些原生的模块,我们称之...

  • Node.js 文件系统

    Node.js 中我们可以使用 fs(File System) 模块来操作文件,文件系统模块有两种不同的方法,分别...

  • Node.js中的文件系统

    Node.js 使用fs(File System)模块来操作文件,文件系统模块有两种不同的方法,分别是同步方法和异...

网友评论

      本文标题:node.js常用内置模块--File System

      本文链接:https://www.haomeiwen.com/subject/labzgktx.html