07 - fs 的功能

2017-10-21  本文已影响0人  小草莓蹦蹦跳


案例一:在dir的目录下面创建一个ddd文件夹(fs模块的mkdir函数,创建文件夹)

var http = require('http');
var fs = require('fs');

var server = http.createServer(function (req, res) {

    /*创建文件夹
     * mkdir:这个方法有两个参数,第一个表示创建的文件夹的路径
     * 第二个表示回调
     * 回调就是一个参数,表示容错*/

    fs.mkdir('./dir/ddd',function (err) {
        if (err){
            throw err;
            return;
        }
        console.log('success');

    });
    res.end();
});
server.listen(3000,'127.0.0.1');

案例三:判断某个文件是否是文件夹。

var http = require('http');
var fs = require('fs');

var server = http.createServer(function (req, res) {

    if (req.url == '/favicon.ico'){
        return;
    }

    /*需求:检测对应的dir下的aaa是否是一个文件夹
     *
     * stat:这个方法有两个参数,第一个参数表示检测的文件的路径
     * 第二个表示检测的结果的回调
     * 回调中有两个参数,第一个表示对应的错误
     * 第二个表示和检测文件相关的一些状态数据*/

    fs.stat('./dir/aaa',function (err, stats) {

        console.log(stats.isDirectory());
    });
    res.end();
});
server.listen(4000,'127.0.0.1');

案例四(失败案例):获取dir下面的所有文件夹

分析过程
1.读取对应的文件夹,获取所有的文件以及文件夹

2.遍历对应的数组,然后获取每一个对应的文件或者文件夹

3.判断是否是一个文件夹,如果是就使用一个数组来记录对应的值
var http = require('http');
var fs = require('fs');

var server = http.createServer(function (req, res) {

    /*处理图标*/
    if (req.url == '/favicon.ico'){
        return;
    }

    /*readdir:第一个参数表示读取的文件的路径
     * 第二个表示回调
     * 回调第一个参数表示错误,第二个参数表示对应的所有的文件以及文件夹*/

    /*0.创建一个数组用来记录结果*/
    var result = [];

    /*1.读取文件夹*/
    fs.readdir('./dir',function (err, files) {
        if (err){
            return;
        }

        /*2.遍历结果*/
        for (var i = 0; i < files.length; i++) {
            var file = files[i];

            /*3.判断对应的file是否是对应的文件夹*/
            fs.stat('./dir/'+file,function (err, stats) {
                if (stats.isDirectory()){
                    /*如果符合条件就记录对应的值
                     * 我们可以创建一个数组来记录对应的结果*/
                    result.push(file);
                }
                console.log(result);
            })
        }
    });
    res.end();
});
server.listen(3000,'127.0.0.1');

执行结果为:

[ 'ddd' ]
[ 'ddd', 'ddd' ]
[ 'ddd', 'ddd', 'ddd' ]
[ 'ddd', 'ddd', 'ddd', 'ddd' ]

出现这种结果的原因:


案例五:获取dir下面的所有文件夹( 使用闭包,闭包内使用递归实现,使得异步变成了同步 )

var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {

    /*处理图标*/
    if (req.url == '/favicon.ico'){
        return;
    }

    /*0.创建一个数组用来记录结果*/
    var result = [];

    /*1.读取文件夹*/
    fs.readdir('./dir',function (err, files) {

        /*闭包实现*/
        (function iterator(i) {

            /*如果要是不设置停止,那么一直递归
             * 我们可以设置当i值等于数组的长度的时候,就停止*/
            if(i == files.length){
                console.log(result);
                return;
            }

            //一个一个单独取出来判断
            var file = files[i];
            fs.stat('./dir/'+file,function (err, stats) {
                if(stats.isDirectory()){
                    result.push(file);
                }

                /*当每次检测完毕后,让对应的i值变化(递归)*/
                iterator(i+1);
            })
        })(0);

    });
    res.end();
});
server.listen(4000,'127.0.0.1');
上一篇下一篇

猜你喜欢

热点阅读