今天公司给我下发了一个任务 主要的一个思路就是递归

{
    "Name": "",
    "page_list": [
        {
            "id": 1,
            "path": "psReport_00.png"
        },
        {
            "id": 2,
            "path": "psReport_01.png"
        },
        {
            "id": 3,
            "path": "psReport_02.png"
        }
    ]
}
const fs = require("fs");
const path = require("path");
let resource = {
    Name: '',
    page_list: []
}

function filenameToJson(filePath) {
    let M = []
    const files = fs.readdirSync(filePath);
    // 遍历读取到的文件列表
    for (let [index, filename] of files.entries()) {
        // path.join获得当前文件的绝对路径
        const filepath = path.join(filePath, filename);
        // 根据文件路径获取文件信息
        const stats = fs.statSync(filepath);
        const isFile = stats.isFile(); // 是否为文件
        const isDir = stats.isDirectory(); // 是否为文件夹
        if (isFile) {
            let isExist = filename.indexOf("page.json") // -1 不存在 0 存在
            if (isExist == -1) {
                let start = filepath.lastIndexOf(filename) // _0x.png
                let name = filepath.substring(0, start)
                files.forEach(function (item, index) {
                    if (item != 'page.json') {
                        M.push({id: index, path: item})
                    }
                })
                resource.page_list = M
                resource.Name = ''
                writeAFile(name, resource, 'page.json')
                break
            }
        }
        if (isDir) {
            M = []
            resource.page_list = []
            filenameToJson(filepath); // 递归,若是是文件夹,就继续遍历该文件夹里面的文件
        }
    }
}

function fileDisplay(filePath) {
    const files = fs.readdirSync(filePath);
    // 遍历读取到的文件列表
    for (let filename of files) {
        // path.join获得当前文件的绝对路径
        const filepath = path.join(filePath, filename);
        // 根据文件路径获取文件信息
        const stats = fs.statSync(filepath);
        const isFile = stats.isFile(); // 是否为文件
        const isDir = stats.isDirectory(); // 是否为文件夹
        if (isFile) {
            let isExist = filename.indexOf("psReport") // -1 不存在 0 存在
            if (isExist == -1) {
                renameFilename(filepath, filename)
            } else {
                // console.log('跳过该文件')
            }
            // temp.push(tail);
        }
        if (isDir) {
            fileDisplay(filepath); // 递归,若是是文件夹,就继续遍历该文件夹里面的文件
        }
    }
}

// data 是新文件的内容,字符串
// fileName是新文件的名字,字符串
function writeAFile(preUrl, data, fileName) {
    let str = JSON.stringify(data, null, '\t')
    let _path = preUrl + fileName
    // console.log('path:', _path, __dirname, path.resolve(preUrl))
    return new Promise((resolve, reject) => {
        fs.mkdir(path.resolve(preUrl), {recursive: true}, (err) => {
            if (err) {
                resolve(err)
            } else {
                fs.writeFile(_path, str, function (err) {
                    if (err) {
                        // 写入文件失败
                        console.log('写入文件失败:', err)
                    } else {
                        // 写入文件成功
                        // console.log('写入文件成功')
                        err = {
                            code: '000000'
                        }
                    }
                    resolve(err)
                })
            }
        })
    })
}

/*
* @Author: Likefr
* @effect: 重命名文件名
* @Date: 2022-03-08
*/
function renameFilename(pathname, filename) {
    let isJson = filename.indexOf("page.json") // -1 不存在 0 存在
    if (isJson == 0) { // 如果是个page.json 则不进行重命名
        return
    }
    // console.log('开始重命名')
    let end = filename.indexOf("_0") // _0x.png
    let tail = filename.substring(end, filename.length)
    let newName = 'psReport' + tail // 重命文件名前缀
    let start = pathname.lastIndexOf(filename) // _0x.png
    let name = pathname.substring(0, start)
    const pathToFile = path.join(__dirname, ('../../' + pathname))
    const newPathToFile = path.join(__dirname, ('../../' + name + newName))
    fs.rename(pathToFile, newPathToFile, function (err) {
        if (err) {
            throw err
        } else {
            console.log(pathname.substring(start, pathname.length) + '- - - - - - - ->' + newName, 'SUCCESS!')
        }
    })
}

let AutoFile = function () {
    console.log('开始扫描文件')
    let paths = 'src/books/'
    fileDisplay(paths) // 文件重命名
    console.log('Json Start')
    filenameToJson(paths) // 根据文件生成json文件
    console.log('page.json 生成完毕')
}


module.exports = {
    AutoFile
}
最后修改:2022 年 03 月 08 日
如果觉得我的文章对你有用,请随意赞赏