node.js是一个基于Chrome V8引擎的JavaScript运行环境。
注意:
浏览器是JavaScript的前端运行环境
Node.js是JavaScript的后端运行环境
Node.js中无法调用DOM和BOM等浏览器内置API
查看已安装的node.js版本号
node -v
在Windows的powershell和cmd中的快捷键
使用↑键,可以快速定位到上一次执行的命令
使用tab键,能够快速补全路径
使用esc键,能够快速清空当前已输入的命令
输入cls命令,可以清空终端
fs文件系统模块
fs模块是nodejs官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:
fs.readFile()方法,用来读取指定文件中的内容
fs.writeFile()方法,用来向指定的文件中写入内容
如果要在JavaScript代码中使用fs模块来操作文件,则需要使用如下的方式先导入它:
const fs=require('fs')
fs.readFile()的语法格式
fs.readFile(path[,options],callback)
参数1:必选参数,字符串,表示文件的路径
参数2:可选参数,表示什么编码格式来去读文件
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果
// 导入fs 模块
const fs=require('fs')
// 调用fs.readFile()方法读取文件
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
// 打印失败的结果
// 如果读取成功,则err的值为null;如果读取失败,则err的值为错误对象,dataStr的值为undefined
console.log(err)
console.log('-------')
// 打印成功的结果
console.log(dataStr)
})
判断文件是否读取成功
const fs=require('fs')
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
if(err){
return console.log('读取文件失败!'+err.message)
}
console.log('读取文件成功!'+dataStr)
})
fs.writeFile()的语法格式
fs.writeFile(file,data[,options],callback)
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2:必选参数,表示要写入的内容
参数3:可选参数,表示已什么格式写入文件内容,默认值是邨utf8
参数4:必选参数,文件写入完成后的回调函数
// 导入fs文件系统模块
const fs=require('fs')
// 调用fs.writeFile()方法,写入文件的内容
fs.writeFile('./files/2.txt','abcd',function(err){
// 如果文件写入成功,则err的值等于null
// 如果文件写入失败,则err的值等于一个错误对象
console.log(err)
})
注意:
fs.writeFile()方法只能用来创建文件,不用用来创建路径
重复调用fs.writeFile()写入同一个文件,新写入的内容会覆盖之前的旧内容
练习
// 导入fs文件系统模块
const fs=require('fs')
// 调用fs.readFile()方法读取文件的内容
fs.readFile('./素材/成绩.txt','utf8',function(err,dataStr){
if(err){
return console.log('读取文件失败~'+err.message)
}
// console.log('读取文件成功~'+dataStr)
// 先把成绩的数据按照空格进行分割
const arrOld=dataStr.split(' ')
// console.log(arrOld)
// 循环分割后的数组,对每一项数据进行字符串的替换操作
const arrNew=[]
arrOld.forEach(item => {
arrNew.push(item.replace('=',':'))
});
console.log(arrNew)
// 把新数组中的每一项进行合并,得到一个新的字符串
const newStr=arrNew.join('\r\n')
console.log(newStr)
// 调用fs.wirteFile()方法,把处理完毕的成绩,写入到新文件中
fs.writeFile('./files/成绩-ok.txt',newStr,function(err){
if(err){
return console.log('写入文件失败~'+err.message)
}
console.log('成绩写入成功')
})
})
fs模块路径动态拼接的问题
在使用fs模块操作文件时,如果提供的操作路径是以./或../开头的相对路径时,很容易出现路径动态拼接错误的问题。
原因:代码在运行的时候,会以执行node命令时所出的目录,动态拼接出被操作文件的完整路径。
解决方案:在使用fs模块操作文件时,直接提供完整的路径,不要提供./或../开头的相对路径,从而仿真路径动态拼接的问题。
// 导入fs文件系统模块
const fs=require('fs')
// 出现路径拼接错误的问题,是因为提供了 ./或../开头的相对路径
// 如果要解决这个问题,可以直接提供一个完整的文件存放路径就行
// fs.readFile('./files/1.txt','utf8',function(err,dataStr){
// if(err){
// return console.log('读取文件失败!'+err.message)
// }
// console.log('读取文件成功!'+dataStr)
// })
// 移植性非常差,不利于维护
// fs.readFile('D:\\nodejs-study\\files\\1.txt','utf8',function(err,dataStr){
// if(err){
// return console.log('读取文件失败!'+err.message)
// }
// console.log('读取文件成功!'+dataStr)
// })
// __dirname表示当前文件所处目录
// console.log(__dirname)
fs.readFile(__dirname+'/files/1.txt','utf8',function(err,dataStr){
if(err){
return console.log('读取文件失败!'+err.message)
}
console.log('读取文件成功!'+dataStr)
})
__dirname表示当前文件所处目录