使用readsFile方法读取文件的内容

//1.导入fs模块
const fs=require('fs')
//2.调用fs.readfile方法读取文件
//1.参数1:读取文件的存放路径
//2.参数2:读取文件时采用的编码格式,一般默认指定utf8
//3.参数3:回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile('./files/1.txt','utf8',function (err,dataStr){
    //2.1打印失败的结果
    //如果读取成功则err的值为null
    //如果读取成功则err的值为错误对象,dataStr的值为undefined
    console.log(err)
    console.log('-------')
    //2.2打印成功的结果
    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)
})

写入文件

//1.导入fs文件系统模块
const fs=require('fs')
//2.调用fs.writeFile()方法,写入文件内容
//参数1:表示文件的存放路径
//参数2:表示要写入的内容
//参数3:回调函数
fs.writeFile('./files/3.txt','ok123',function (err){
    //2.1如果文件写入成功,则err=null
    //2.2如果写入失败,则err是一个错误对象
    //console.log(err)

    if(err){
        return console.log('文件写入失败'+ err.message)
    }
    console.log('文件写入成功')
})

整理成绩

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

//2.调用fs.require()读取文件的内容
fs.readFile('../素材/成绩.txt','utf8',function (err,dataStr){
    //3.判断是否读取成功
    if(err){
        return console.log('读取文件失败'+err.message)
    }
    //console.log('读取文件成功'+dataStr)

    //4.1 先把成绩的数据进行分割
    const  arrOld=dataStr.split(' ')
    //console.log(arrOld)
    //4.2循环分割后的数组,对每一项数据进行字符串的替换操作
    const arrNew=[]
    arrOld.forEach(item=>{
        arrNew.push(item.replace('=',':'))
    })
    //console.log(arrNew)
    //4.3把新数组中的每一项进行合并,得到一个新的字符串
    const newStr=arrNew.join('\r\n')
    console.log(newStr)

    //5调用fs.writeFile()方法,把处理完毕的成绩写入到新文件中去
    fs.writeFile('./files/成绩-ok.txt',newStr,function (err){
        if(err){
            return console.log('写入文件失败'+err.message)
        }
        console.log('成绩写入成功')
    })
})

演示路径问题

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('C:\\code\\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)
})

path.join方法的使用

const path=require('path')
 const fs=require('fs')

// //注意:../会抵消前面的路经
// const pathStr=path.join('/a','/b/c','../','/d','/e')
// console.log(pathStr)//\a\b\d\e

 fs.readFile(path.join(__dirname+'/files/1.txt'),'utf8',function (err,dataStr){
     if (err){
         return console.log(err.message)
     }
     console.log(dataStr)
 })

path.basename方法的使用

const path=require('path')


//定义文件的存放路径
const fpath='/a/b/c/index.html'

// const fullName=path.basename(fpath)
// console.log(fullName)

const nameWithoutExt=path.baseName
console.log(nameWithoutExt)

path.extname方法的使用

const path=require('path')


//定义文件的存放路径
const fpath='/a/b/c/index.html'
const fext=path.extname(fpath)
console.log(fext)

时钟案例

//1.导入fs模块
const fs=require('fs')
//1.2导入path模块
const path=require('path')


//1.3定义正则表达式,分别匹配<style></style>和<script></script>
const regStyle=/<style>[\s\S]*<\/style>/
const regScript=/<script>[\s\S]*<\/script>/

//2.1调用fs.readFile()方法读取文件
fs.readFile(__dirname+'../素材/index.html','utf8',function (err,dataStr) {
    //2.2读取文件失败
    if (err)
        return console.log('读取文件失败' + err.message)
    //2.3读取文件成功后,调用对应的三个方法,分别拆解出css,js,html文件
    resolveCSS(dataStr)
    resolveJS(dataStr)
    resolveHTML(dataStr)
})

//3.1定义处理css样式的方法
function resolveCSS(htmlStr){
    //3.2使用正则表达式提取需要的内容
    const r1=regStyle.exec(htmlStr)
   //3.3 将提取出来的样式字符串,进行字符串的replace替换操作
    const newCSS=r1[0].replace('<style>','').replace('</style>','')
//3.4调用readFile()方法,将提取的样式,写入到clock目录中index.css的文件里面
    fs.readFile(path.join(__dirname+'./clock/index.css'),newCSS,function (err) {
        if (err) return console.log('写入css样式失败' + err.message)
})
}

//4.1定义处理js脚本的方法
function resolveJS(htmlStr){
    //4.2通过正则,提取对应的<script></script>标签内容
    const r2=regScript.exec(htmlStr)
    //4.3将提取出来的内容做进一步处理
    const newJS=r2[0].replace('<style>','').replace('</style>','')
    //4.4将处理的结果,写入到clock目录中的index.js文件中
    fs.readFile(path.join(__dirname+'./clock/index.js'),newJS,function (err) {
        if (err) return console.log('写入JS脚本失败' + err.message)
        console.log('写入JS脚本成功')
    })
}

//5.1定义处理jHTML结构的方法
function resolveHTML(htmlStr){
    //5.2将字符串调用replace方法,把内嵌的style和script标签,替换为外联的link和script标签
    const newHTML=htmlStr.replace(regStyle,'<link rel="stylesheet" href="./index.css"/>').replace(regScript,'<script src="./index.js"></script>script>')
    //5.3写入index.html文件中
    fs.readFile(path.join(__dirname+'./clock/index.html'),newHTML,function (err) {
        if (err) return console.log('写入HTML文件失败' + err.message)
    })

}

Q.E.D.