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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容