NodeJS

文件处理

FS

代码示例:

// server.js

const fs = require('fs')
const {data} = require("cheerio/lib/api/attributes")

fs.mkdir('./foo', err => {
    // 创建一个空文件夹
    console.log(err)  // 成功则返回null
    if (err && err.code === 'EEXIST') {
        console.log('文件夹已存在')
    }
})

fs.rename('./foo', './bar', err => {
    // 重命名文件夹
    console.log(err)
    if (err && err.code === 'ENOENT') {
        console.log('文件夹不存在')
    }
})

fs.rmdir('./bar', err => {
    // 删除空文件夹
    console.log(err)
    if (err && err.code === 'ENOENT') {
        console.log('文件夹不存在')
    }
})

fs.writeFile('./foo/bar.txt', 'Hello World!', err => {
    // 创建文件并写入内容(有相同文件则会覆盖内容)
    console.log(err)
})

fs.appendFile('./foo/bar.txt', '\n----', err => {
    // 追加内容
    console.log(err)
})

fs.readFile('./foo/bar.txt', 'utf-8', (err, data) => {
    // 读文件内容
    if (!err) {  // error-first
        console.log(data)
    }
})

fs.unlink('./foo/bar.txt', err => {
    // 删除文件
    console.log(err)
    if (err && err.code === 'ENOENT') {
        console.log('文件不存在')
    }
})

fs.readdir('./foo', (err, data) => {
    // 获取文件夹的文件信息
    if (!err) {
        console.log(data)
    }
})

fs.stat('./foo', (err, data) => {
    // 获取URL的详细信息
    if (!err) {
        console.log(data.isFile())  // 是否为一个文件
        console.log(data.isDirectory())  // 是否为一个文件夹
    }
})

try {  // 报的是系统级别的错误(会导致项目崩掉)
    fs.mkdtempSync('./foo')  // 创建文件夹的同时阻塞后面的代码运行(同步)
} catch (error) {
    console.log(error)
}

fs.readdir('./foo', (err, data) => {
    if (!err) {
        data.forEach(item => {
            // fs.unlink(`./foo/${item}`, err => {})  // 异步
            try {
                fs.unlinkSync(`./foo/${item}`)
            } catch (error) {
                console.log(error)
            }
            fs.rmdir('./foo', err => {
                console.log(err)
            })
        })
    }
})
// server02.js

const fs = require('fs').promises  // 第二种写法

fs.mkdir('./foo').then(data => {
    console.log(data)
}).catch(err => console.log(err))

fs.readFile('./foo', 'utf-8').then(data => {
    console.log(data)
}).catch(err => console.log(err))

fs.readdir('./foo').then(async data => {
    let arr = []
    data.forEach(item => {
        arr.push(fs.unlink(`./foo/${item}`))
    })
    await Promise.all(arr)  // 等待数组里面的元素都执行完毕
    await fs.rmdir('./foo')
}).catch(err => console.log(err))

fs.readdir('./foo').then(async data => {  // 第二种写法
    await Promise.all(data.map(item => fs.unlink(`./foo/${item}`)))
    await fs.rmdir('./foo')
}).catch(err => console.log(err))