//1.导入fs模块 操作文件
const fs = require('fs')//前面的fs随便叫什么都行是个常量
//2.调用fs.redFile()方法读取文件
// 参数1,读取文件的存放路径
// 参数2,读取文件时候采用的编码格式
// 参数3,回调函数,拿到读取失败err 或者读取成功 dataStr的结果
fs.readFile('./j1.txt', 'utf8', function (err, dataStr) {
//2.1打印失败的结果
//如果读取成功,err的值为null
//如果读取失败,err的值变成错误对象 dataStr的值为undefined
console.log(err)
console.log('-----------')
//2.1打印成功的结果 dataStr是文件内容
console.log(dataStr)
})//注意这个括号 大括号的位置关系
// javascript
// fs.readFile(path[, options], callback)
// path:要读取的文件的路径。
// options:一个可选的对象,用于指定读取文件的选项。常用的选项包括编码格式(encoding),默认值为 null,以二进制形式返回原始缓冲区数据;或者可以指定编码格式,如 'utf8'。
// callback:回调函数,用于处理文件读取的结果。它接收两个参数:err 和 data。其中,err 是可能发生的错误对象,如果读取文件成功,则为 null;data 是读取到的文件内容。
//判断文件是否读取成功
const fs = require('fs')
fs.readFile('./1.txt', 'utf8', function (err, dataStr) {
if (err) {//如果err为null就是读取成功
return console.log('读取文件夹失败' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
//1.导入fs模块 操作文件
const fs = require('fs')//前面的fs随便叫什么都行是个常量
//2.调用fs.writeFile()方法 写入文件的内容
// 参数1,表示文件存放路径
// 参数2,表示要写入的内容
// 参数3,utf8默认格式 此处没写(可选)
// 参数4,回调函数
fs.writeFile('./1.txt', 'abcd', function (err) {
// console.log(err)
if (err) {
// 如果文件写入成功 err等于null
// 如果文件写入失败 err等于一个错误对象
return console.log('文件写入失败' + err);
}
console.log('文件写入成功!')
})
const fs = require('fs')
fs.readFile('./cj素材.txt', 'utf8', function (err, dataStr) {
if (err) {
return console.log('读取失败' + err.message)
}
console.log('读取成功' + dataStr)
// 4.1先把成绩的数据 按照空格进行分割
const arrOld = dataStr.split(' ')//里面穿了一个空格
console.log(arrOld)//[ '小红=99', '小白=100', '小黄=70', '小黑=66', '小绿=88' ]
// 4.2循环分割后的数组,对每一项数据 进行字符串的替换操作
const arrNew = []
arrOld.forEach(item => {
arrNew.push(item.replace('=', ':'))
})
console.log(arrNew)//[ '小红:99', '小白:100', '小黄:70', '小黑:66', '小绿:88' ]
// 4.3把新数组中的每一项 进行合并 得到一个新的字符串
const newStr = arrNew.join('\r\n')//回车换行
console.log(newStr)
// 小红: 99
// 小白: 100
// 小黄: 70
// 小黑: 66
// 小绿: 88
//调用 fs.writeFile方法 把处理完毕的成绩写入新文件中
fs.writeFile('./ok.txt', newStr, function (err) {
if (err) {
return console.log('写入失败' + err.message)
}
console.log('写入成功')
})
fs.readFile('./ok.txt', 'utf8', function (err, dataStr) {
if (err) {
return console.log('读取失败' + err.message)
}
console.log('读取成功' + dataStr)
})
})
// 先读取 读取后处理好 处理好后写入一个新文件中
//判断文件是否读取成功
const fs = require('fs')
// fs.readFile('./1.txt', 'utf8', function (err, dataStr) {
// if (err) {//如果err为null就是读取成功
// return console.log('读取文件夹失败' + err.message)
// }
// console.log('读取文件成功!' + dataStr)
// })
//如果该代码不是在NJS而是在上一级文件夹 则
// 读取失败 因为会在当前命令提示符的地址 动态拼接接下来灯地址
// ./ ../这种相对地址 执行因为的动态拼接 很容易失败
// 解决办法:绝对路径
// 绝对路径中需要使用\\ 因为一个\代表转义 两个才代表地址的斜杠
// fs.readFile('D:\\朱羽创建的D盘文件夹\\VScode\\VScodeline\\NJS\\1.txt', 'utf8', function (err, dataStr) {
// if (err) {//如果err为null就是读取成功
// return console.log('读取文件夹失败' + err.message)
// }
// console.log('读取文件成功!' + dataStr)
// })
// 移植性非常差 不方便维护
// 解决办法:
// __dirname 表示当前文件所处的目录
// 优点 不会根据命令提示符执行的当前地址 而受影响
// (相当于把绝对路径 的一大段变成了一个模块 叫双下划线dirname 再加上你要链接的文件就行)
console.log(__dirname)
fs.readFile(__dirname + '/1.txt', 'utf8', function (err, dataStr) {
if (err) {//如果err为null就是读取成功
return console.log('读取文件夹失败' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
const path = require('path')
const fs = require('fs')
// path是用来处理路径的模块
// join可以拼接路径
// 注意../会抵消前一层路径
const pathStr1 = path.join('/a', '/b/c', '../', 'e')
console.log(pathStr1)//\a\b\e c被抵消了
//对比
//fs.readFile(__dirname + '/j1.txt' )
// 一个加号 一个逗号 pathjoin在于 点点杠还是点杠不用写的很标准 不对的会自动变对
fs.readFile(path.join(__dirname, './j1.txt'), 'utf8', function (err, dataStr) {
if (err) {//如果err为null就是读取成功
return console.log('读取文件夹失败' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
// path.basename()方法 将路径字符串中的 文件名解析出来
// 导入path
const path = require('path')
//先定义一个文件存放路径
const fpath = '/a/b/index.html'
// 定义变量名为完整名字 使其等于 basename方法得出的结果。
// 向basename中传参 fpath就是地址
const fullName = path.basename(fpath)
console.log(fullName)//index.html
/// 区别在于加了: , '.html')
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt)//index 移除了扩展名部分
// 导入path
const path = require('path')
//先定义一个文件存放路径
const fpath = '/a/b/index.html'
const fext = path.extname(fpath)
console.log(fext)// .html 仅获取文件的扩展名部分
以上是 从黑马nodejs 读取文件到获取扩展名的代码和笔记,就是视频里的代码加点解释,案例最好自己敲,不然就是走马观花