首页 > 编程语言 >Node.js(笔记02) - fs文件系统模块

Node.js(笔记02) - fs文件系统模块

时间:2022-12-21 19:00:53浏览次数:37  
标签:Node 02 fs console 读取 err 文件 data

fs 文件系统模块

fs 模块是 Node.js 官方提供的,用来操作文件的模块。提供了一系列的方法和属性,用来满足用户对文件的操作需求;

例如:

fs.readFile() 方法,用来读取指定文件中的内容;

fs.writeFile() 方法,用来向指定的文件写入内容;

要在JS代码中,使用 fs 模块操作文件,需要先引入这个模块;

引入模块基本语法:

const fs = require('fs')

fs 模块从哪儿来的?安装了 Node.js 后就自带了,用时直接引入就行。


读取指定文件内容

fs.readFile() 的语法格式

fs.readFile(path[,options],callback)

-- path: 必选参数,字符串,表示文件路径

-- options: 可选参数,表示以什么编码格式来读取文件

-- callback: 必选参数,文件读取完成后,通过回调函数拿到读取结果

示例:

写一个 fs.js 文件,读取 files/hello.md 文件;

const fs = require('fs')
fs.readFile('./files/hello.md','utf8',(err,data)=>{
console.log(err);
console.log('------');
console.log(data);
})

提示1:输出回调的两个参数数据,用"-"分隔;

提示2:编码格式一般指定 utf8 ,不指定会输出 buffer 二进制数据;

提示3:回调函数有两个参数,err 是失败的结果,data 是成功的结果;

看下结果:

Node.js(笔记02) - fs文件系统模块_Node.js

成功读取了文件的内容,err 为 null,data为文件内容;

改成错误的路径,看下结果:

Node.js(笔记02) - fs文件系统模块_fs 文件系统模块_02

读取失败了,err 输出为错误对象,data 输出为 undefined。

判断文件读取是否成功

加个判断,让代码看起来更安全;

const fs = require('fs')
fs.readFile('./files/hello.md', 'utf8', (err, data) => {
if (err) {
return console.log('读取失败:' + err.message);
}
console.log('读取成功,内容是:' + data);
})

提示:为什么要用 return 呢?如果失败直接 return 结束,后面不执行了。

看下读取成功的结果:

Node.js(笔记02) - fs文件系统模块_Node.js_03

改成错误的路径:hello.mdd 不存在的文件

fs.readFile('./files/hello.mdd', 'utf8', (err, data) => {
//...
})

Node.js(笔记02) - fs文件系统模块_Node.js_04

输出错误消息;


向指定文件写入内容

fs.writeFile() 的语法格式

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

-- file: 必选参数,需要指定文件存放的路径字符串

-- data:必选参数,要写入的内容

-- options: 可选参数,表示以什么编码格式来写入文件,默认utf8

-- callback: 必选参数,文件写入完成后的回调

示例:

写一个 fs_write.js 文件,写入一首诗到 files/poem.md 文件;

const fs= require('fs')
let data = '我打碎了夕阳,想起你明媚的模样,与你牵手的过往,成为我余生的光。'
fs.writeFile('./files/poem.md',data,(err)=>{
console.log(err);
})

提示1:一首小诗有点长,单独存放变量data中;

提示2:第三个参数 options 省略了,默认 utf8 编码格式;

揭示3:回调中只有一个参数 err,即写入失败后的错误对象;

看下结果:

Node.js(笔记02) - fs文件系统模块_fs 文件系统模块_05

输出结果为 null ,代表成功写入文件;

Node.js(笔记02) - fs文件系统模块_Node.js_06

改成不存在的路径,让程序报错:

fs.writeFile('f:./files/poem.md',data,(err)=>{
//...
})

提示:不存在这个路径,看错误结果;

Node.js(笔记02) - fs文件系统模块_fs 文件系统模块_07

判断文件是否写入成功

加个判断语法,让代码更友好、更安全;

const fs= require('fs')
let data = '我打碎了夕阳,想起你明媚的模样,与你牵手的过往,成为我余生的光。'
fs.writeFile('./files/poem.md',data,'utf8',(err)=>{
if(err){
return console.log('出错了:'+err.message);
}
console.log("成功写入一首诗");
})

提示:诗还是那首诗,err 对象不为 null 代码出错了;否则即成功写入;

成功写入的结果:

Node.js(笔记02) - fs文件系统模块_fs 文件系统模块_08

写入失败的结果:改个错误的路径测试;

Node.js(笔记02) - fs文件系统模块_fs 文件系统模块_09


文件读写练习

需求:使用 fs 模块,把 score.txt 文件中的考试数据,整理到 scroe_ok.txt 文件中;

整理前:score.txt 

小明=99 小红=100 小王=89 小黑=68 小欠=90

Node.js(笔记02) - fs文件系统模块_Node.js_10

整理后:score_ok.txt

小明:99 
小红:100
小王:89
小黑:68
小欠:90

需求分析:

1)导入fs模块;

2)使用fs.readFile() 方法,读取 score.txt 

3)判断文件是否读取失败

4)文件读取成功后,处理成绩数据

5)调用fs.writeFile() 方法,写入新文件 score_ok.txt

代码实现:

const fs = require('fs')
fs.readFile('./files/score.txt', 'utf-8', (err, data) => {
if (err) {
return console.log('出错了:' + err.message)
}
// 按空格分隔符取数据,变为数组
let arrOld = data.split(' ')
let arrNew = []
arrOld.forEach(item=>{
// 遍历旧数组,生成新数组格式
arrNew.push(item.replace('=',':'))
})
// 拼接数组成字符串赋值给 arrStr
let arrStr = arrNew.join('\r\n')
fs.writeFile('./files/score_ok.txt',arrStr,(err)=>{
if(err){
return console.log('出错了:'+err.message)
}
console.log('成功写入score_ok.txt');
})
})

提示:对数组的几种操作方法,split()、forEach()、replace()、join()

看下结果:

Node.js(笔记02) - fs文件系统模块_Node.js_11

看下生成的文件 score_ok.txt

Node.js(笔记02) - fs文件系统模块_Node.js_12


路径动态拼接的问题

在使用 fs 模块操作文件时,使用 "./" 或 "../" 相对路径,容易拼接错误;

const fs  = require('fs')
fs.readFile('./files/hello.md','utf8',(err,data)=>{
if(err){
return console.log('读取失败:'+err.message)
}
console.log('读取成功:'+data);
})

Node.js(笔记02) - fs文件系统模块_Node.js_13

同一个文件,在 fs.js 当前目录使用命令执行没有问题;

> node fs.js

一旦放到其他目录再执行,就会出问题了;

> node ./nodejs/fs.js

错误的原因:代码运行时,会执行 node 命令所在的目录,动态拼接出被操作的文件的完整路径。

正确的完整路径是:

D:\Pro_Temp\nodejs\files\hello.md

出错后的完整路径是:

D:\Pro_Temp\files\hello.md

注意:Pro_Temp 目录下没有 files 目录,所以报错了;


引入 __dirname 路径属性

__dirname 就表示当前文件所在的目录,是个绝对路径,这样就不存在执行 node 命令的目录导致的路径拼接错误了;

改下代码:使用 ​__dirname​ 重新拼接绝对路径;

const fs  = require('fs')
fs.readFile(__dirname + '/files/hello.md','utf8',(err,data)=>{
if(err){
return console.log('读取失败:'+err.message)
}
console.log('读取成功:'+data);
})

Node.js(笔记02) - fs文件系统模块_Node.js_14

提示:即使不在 fs.js 所在目录,也能正确执行读取文件了;


标签:Node,02,fs,console,读取,err,文件,data
From: https://blog.51cto.com/ahuiok/5960072

相关文章

  • 【限时免费领取】2020-2022音视频 & 元宇宙行业报告精华合集,可单份或一次性打包下载!
     各位开发者小伙伴,社区运营小姐姐为大家准备了一份技术大礼包。涵盖音视频、元宇宙两大领域2020-2022年度精选行业分析报告,现开启限时免费领取!微信扫码获取行业报告,开......
  • kubeasz 安装 K8S 集群启用 NFS 存储问题排查
    目录kubeasz安装Kubernetes集群启用NFS存储,默认情况无法安装使用问题排查集群规划安装Kubernetes集群问题复现配置文件中默认启用nfs存储安装后nfspod无法启动......
  • SQL0289N Unable to allocate new pages in table space
    db2-tvfzhangsan.sql报错:"SQL0289NUnabletoallocatenewpagesintablespace"USERSPACE1".SQLSTATE=57011"表空间大小不够了可以在备份库下执行db2listtablespace......
  • Media Encoder 2021 for Mac(ame 2021永久版) v15.4.1中文版
    MediaEncoder2021中文版是一款优秀的视频音频编码器,能够将多种设备格式的音频或视频进行导出,提供了丰富的硬件设备编码格式设置以及专业设计的预设设置,方便用户导出与特定......
  • 2022年总结
    转眼,2022年就剩下十多天了。 倒是应了那句老话:“人生天地之间,若白驹过隙,忽然而已。” 不管你是否准备好,2022年倒计时的钟表已经敲响,最后十天,请记得好好地谢谢自己!......
  • DPU02是一个高度集成的USB转UART的桥接控制器
    DPU02是一个高度集成的USB转UART的桥接控制器,该产品提供了一个简单的解决方案,可将RS-232设计更新为USB设计,并简化PCB组件空间。该DPU02包括了一个USB2.0全速功能控制器、U......
  • 2022 卡塔尔世界杯收官,中国 App 继续中东「征战」
    完整报告,限免下载,点击获取卡塔尔世界杯完美收官,球王梅西梦圆大力神杯。关注【融云全球互联网通信云】了解更多这届世界杯不仅属于每一个奋战的球员,也是卡塔尔当之无愧的高光......
  • k8s高级存储-GlusterFS存储类(StorageClass)实战
       GlusterFS是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。集成来自多台服务器上的磁盘存储资源到单一全局命名......
  • Node.js(笔记01) - 初识Node.js
    本次学习目录:1)初识 Node.js2)fs 文件系统模块3)path 路径模块4)http 模块初识Node.js 回顾与思考1)前端需要掌握的基本技术:HTML、CSS和JAVASCRIPT2)浏览器中的 Javascri......
  • HTML-2022-12-21
    HTMLhypertextmarkuplanguage 超文本(图片,文本,音频,视频,动画等)标记语言网页-右键-审查元素即可看到网页代码世界知名浏览器都支持HTML5W3C标准 WORLDWIDE......