nodejs之fs模块、async await使用、fs中的流

一、nodejs中fs模块

1、fs.stat()
fs.stat检测是文件还是目录

fs.stat('./html', (err, data) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log(`是文件:${data.isFile()}`);
    console.log(`是目录:${data.isDirectory()}`);
})

打印出:
是文件:false
是目录:true

fs.stat('./package.json', (err, data) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log(`是文件:${data.isFile()}`);
    console.log(`是目录:${data.isDirectory()}`);

})

打印出:
是文件:true
是目录:false

2、fs.mkdir()
fs.mkdir创建目录

在该级目录下创建一个名为css的文件夹:

fs.mkdir('./css', (err) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log('创建成功');
})

打印出:
创建成功

3、fs.writeFile()
fs.writeFile创建写入文件

fs.writeFile('./html/index.html', '你好nodejs', (err) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log('创建写入文件成功');
})

打印出:
创建写入文件成功
(其中index.html中的内容为你好nodejs)

4、fs.appendFile()
fs.appendFile追加文件

fs.appendFile('./css/base.css', 'body{color:red}', (err) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log('appendFile 成功');
})

打印出:
appendFile 成功
(其中base.css中的内容为body{color:red})

5、fs.readFile()
fs.readFile读取文件

fs.readFile('./html/index.html', (err, data) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log(data); //输出  
    console.log(data.toString()); //把Buffer转化为string类型   输出  你好nodejs
})

打印出:

你好nodejs

6、fs.readdir()
fs.readdir读取目录

读取html文件夹下的文件:

fs.readdir('./html', (err, data) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log(data);
})

打印出:
[ ‘index.html’ ]

7、fs.rename()
fs.rename 重命名
将base.css文件重命名为index.css:

fs.rename('./css/base.css', './css/index.css', (err) => {
    if (err) {
        console.log(err);
        return;
    }
    console.log('重命名成功');
})

打印出:
重命名成功

8、fs.unlink()
fs.unlink删除文件
将aaa目录下的aaa.html文件删除:

fs.unlink('./aaa/aaa.html', (err) => {
    if (err) {

        console.log(err);
        return;
    }
    console.log('删除目录成功');
})

打印出:
删除目录成功

9、fs.rmdir()
fs.rmdir删除目录
删除aaa目录:

fs.rmdir('./aaa', (err) => {
    if (err) {

        console.log(err);
        return;
    }
    console.log('删除目录成功');
})

打印出:
删除目录成功

二、async await使用

定义一个isDir方法来判断一个资源到底是目录还是文件

const fs = require('fs');

async function isDir(path) {
    return new Promise((resolve, reject) => {
        fs.stat(path, (error, stats) => {
            if (error) {
                console.log(error);
                reject(error);
                return;
            }
            if (stats.isDirectory()) {
                resolve(true);
            } else {
                resolve(false);
            }
        })
    })
}

循环遍历(其中root目录下有css、imgs、js三个文件夹):

function main() {
    var path = '../demo4/root';
    var dirArr = [];
    fs.readdir(path, async(err, data) => {
        if (err) {

            console.log(err);
            return;
        }
        for (var i = 0; i < data.length; i++) {
            if (await isDir(path + '/' + data[i])) {
                dirArr.push(data[i]);
            }
        }
        console.log(dirArr);
    })

}
main();

打印出:
[ ‘css’, ‘imgs’, ‘js’ ]

三、fs中的流

nodejs之fs模块、async await使用、fs中的流_第1张图片

fs.createReadStream从文件流中读取数据:

const fs = require('fs');

var readStream = fs.createReadStream('./data/input.txt');

var count = 0;
var str = '';
readStream.on('data', (data) => {
    str += data;
    count++;
    console.log(data);
    console.log(data.toString());
})
readStream.on('end', () => {
    console.log(str);
    console.log(count);
})
readStream.on('error', (err) => {
    console.log(err);
})

打印出:

123123123
123123123
1
(打印出来的是data目录下input.txt文件里的内容)

fs.createWriteStream写入文件:

const fs = require('fs');
var str = '';

for (var i = 0; i < 50; i++) {
    str += '嘿嘿嘿\n';
}

var writeStream = fs.createWriteStream('./data/output.txt');
writeStream.write(str);

//标记写入完成
writeStream.end();
writeStream.on('finish', () => {
    console.log('写入完成');
})

打印出:
写入完成
(在data目录下自动创建output.txt文件,文件里的内容为str)

你可能感兴趣的:(node.js,node.js)