node.js -- fs模块学习

什么是node.js

nodejs是一个基于chromeV8引擎的JavaScript的运行环境

  • Node.js中的JavaScript运行环境

nodejs中的内置api:
fs path http JS内置对象 querystring …
注释:
浏览器是JavaScript的前端运行环境
nodejs是JavaScript的后端运行环境
nodejs 中无法调用DOM和BOM等等浏览器内置api

  • node.js 可以做什么
    nodejs作为一个JavaScript的运行环境,仅仅提供基础的功能和API。然而,基于Nodejs提供的这些基础功能,很多强大的工具和框架非常多。

基于Epress框架,可以快速构建web应用
基于Electron框架,可以构建跨平台的桌面应用

会JavaScript 就能学会nodejs

Node.js的学习路径

JavaScript基础语法+ Nodejs内置api模块 (fs path http等) + 第三方API模块(express mysql等)。

查看已安装的Nodejs的版本号

打开终端 在终端中输入命令node-v后 按下回车键 即可查看已安装的nodejs的版本号

什么是终端

终端是专门为开发人员设计的 用于实现人机交互的一种方式
作为一名合格的程序员 有必要记忆一些常用的终端命令

在nodejs环境中执行JavaScript代码

1 打开终端
2 输入node + 要执行的js文件

js文件:

console.log("hello world")

终端命令:

PS D:\前端代码\js练习文件夹> node 1.js
hello world

在这里插入图片描述

cmd与powershell的区别

powershell是windows里新的终端 是cmd的升级版

终端的常用快捷键

1 上箭头 快捷生成历史上次的命令
2 使用tab键 能够快速补全文件路径
3 使用esc键 能够快速清空当前命令行中的命令
4 输入cls命令 可以清空终端当前页面所有的内容

什么是fs文件系统模块

fs模块是nodejs官方提供的 用来操作文件的模块

fs.readFile()方法:用来读取指定文件中的内容
fs.writeFile()方法:用来向指定的文件中写入内容

如果要使用fs模块需要先导入它

const fs = require('fs')
// 使用require方法导入模块

读取指定文件的内容

fs.readFile()方法的语法格式

fs.readFile(path[,options],callback)
//方括号为可选参数

参数1:必选参数 字符串 表示文件的路径
参数2:可选参数 表示以什么编码格式来读取文件
参数3: 必选参数 文件读取完后 通过回调函数拿到读取的结果

实例:

// 导入fs模块
const fs = require('fs')

// 调用fs.readfile()方法来读取文件
//参数1 读取文件的存放路径
//参数2 读取文件时候采用的编码格式 一般默认指定utf8
//参数3 回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile('./file/11.txt','utf-8',function(err,dataStr){
//打印失败的结果
	console.log(err)
	//打印成功的结果
	console.log('------')
	console.log(dataStr)
})

在这里插入图片描述
如果读取成功则 err的值为null
如果读取失败则 err的值为一个错误对象 dataStr的值为undifined

判断文件是否被读取成功

可以判断err对象是否为null 从而知晓文件读取的结果

if (err){
	return console.log(“读取失败”,err.message)
}else{
	return console.log("读取成功",dataStr)
}

fs.writeFile()的语法格式

使用fs.write()方法,可以向指定文件写入内容

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

参数1 必选参数 需要指定一个文件路径的字符串 表示文件的存放路径
参数2 必选参数 表示要写入的内容
参数3 可选参数 表示以什么格式 写入文件内容 默认值是utf8
参数4 必选参数 文件写入完成后的回调函数

实例代码:

// 导入fs文件系统模块
const fs = require('fs‘)
// 调用fs.writeFile()方法 写入文件内容
//参数1 表示文件的存放路径
//参数2 表示要写入的内容
//参数3 回调函数
fs.writeFile('./11.txt','hello world',function(err){
console.log(err)
})

如果文件写入成功则err的值等于null
如果文件写入失败则err的值会是一个错误对象

判断文件是否写入成功

if (err){
	return console.log(“写入失败”,err.message)
}else{
	return console.log("写入成功")
}

练习 考试成绩整理

使用fs模块 将目录下成绩txt文件中的考试数据,整理到新文件中

原文件内容
在这里插入图片描述
实现步骤:
1 导入fs文件系统模块
2 使用fs.readFile()方法 读取文件
3 判断文件是否处理成功
4 读取成功后处理数据
5 把处理完成后的文件写入新文件内

const fs = require('fs')

fs.readFile('./成绩.txt','utf-8',function(err,dataStr){
	if (err){
		return console.log('读取失败')
}else{
	   return console.log(’读取成功‘,dataStr)
}
	//先把成绩数据 按空格进行分割
	const arrOld = dataStr.split('')
	console.log(arrOld)
//循环分割后的数组 对每一项数据 进行字符串的替换操作

	var arrNew = [];
	arrOld.forEach(item =>{
		arrNew.push(item.replace('=’,‘:’))    //将等号替换为冒号
})

//将新数组的每一项 进行合并得到一个新的字符串

var newStr =  arrNew.join('\r\n')
	
console.log(newStr)


//调用fs.writeFile()方法把处理完毕的成绩写入到新文件中

fs.writeFile('./成绩.txt',newStr,function(err){
	if (err){
			return console.log('写入失败')
}else{
	return console.log(成绩写入成功')
}

})
})


fs模块路径动态拼接问题

在使用fs模块是 如果提供的文件是相对路径是 很容易出现动态拼接的问题

在这里插入图片描述
原因:程序会根据执行node时所处的目录来动态拼接出文件的完整路径

解决办法:可以直接提供一个完整的文件存放路径 以防止路径动态拼接的问题

使用完整路径的缺点:移植性非常差 不利于维护

//__dirname 表示当前文件所处的路径
console.log(__dirname)

优化代码

const fs = require('fs')

fs.readFile(__dirname +'成绩.txt','utf-8',function(err,dataStr){
	if (err){
		return console.log('读取失败')
}else{
	   return console.log(’读取成功‘,dataStr)
}
	//先把成绩数据 按空格进行分割
	const arrOld = dataStr.split('')
	console.log(arrOld)
//循环分割后的数组 对每一项数据 进行字符串的替换操作

	var arrNew = [];
	arrOld.forEach(item =>{
		arrNew.push(item.replace('=’,‘:’))    //将等号替换为冒号
})

//将新数组的每一项 进行合并得到一个新的字符串

var newStr =  arrNew.join('\r\n')
	
console.log(newStr)


//调用fs.writeFile()方法把处理完毕的成绩写入到新文件中

fs.writeFile(__dirname + '/成绩.txt',newStr,function(err){
	if (err){
			return console.log('写入失败')
}else{
	return console.log(成绩写入成功')
}

})
})

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲鸭嘟嘟可

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值