美文网首页
07 - fs 的功能

07 - fs 的功能

作者: 小草莓蹦蹦跳 | 来源:发表于2017-10-21 17:43 被阅读0次
    1. 读取文件
    • 当我们想要返回一个页面的时候,我们不能直接通过end返回。
      因为end中只能设置字符串和二进制,我们可以借助一个 fs 的包。

    • 这个包可以导入。然后通过这个包来读取对应的文件,读取文件后会有对应的返回的数据,返回数据就是一个二进制

    • 读取文件的方法 readFile()
      这个方法有两个参数,
      第一个参数表示对应的文件的路径(我们使用相对路径)(./表示当前目录);
      第二个参数表示对应的回调的数据
      回调中有两个参数,
      第一个参数表示错误;
      第二个表示对应的数据


    1. 创建一个文件夹(fs模块的mkdir函数,创建文件夹)
    • 创建文件夹的方法:mkdir()

    • 这个方法有两个参数,第一个表示创建的文件夹的路径;第二个表示回调

    • 回调中就只有一个参数,表示容错


案例一:在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');
    1. fs模块的stat函数,检测文件状态。
    • stat:这个方法有两个参数,第一个参数表示检测的文件的路径,第二个表示检测的结果的回调

    • 回调中有两个参数,第一个表示对应的错误,第二个表示和检测文件相关的一些状态数据

    • 回调函数中的stats有isDirectory()方法,可以判断文件夹。


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

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');
    1. 获取dir下面的所有文件夹
    • 通过 readdir 方法来读取对应的文件夹

    • readdir方法有两个参数,第一个参数表示读取的路径,第二个参数表示回调

    • 回调中第一个参数表示对应的err,第二个参数表示读取的文件夹下面所有的文件以及文件夹,是一个 数组


案例四(失败案例):获取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' ]

出现这种结果的原因:

  • 凡是读写操作中的回调在node.js中都是异步的,就是说我们对应的获取的回调数据,有延迟

  • 延迟操作不能正确获取到for循环中的 i 值,只能拿到最后一个或者+1个

  • 解决的办法:使用闭包


案例五:获取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');
  • 正确的结果:
    [ 'aaa', 'bbb', 'ccc', 'ddd' ]

相关文章

  • 07 - fs 的功能

    读取文件当我们想要返回一个页面的时候,我们不能直接通过end返回。因为end中只能设置字符串和二进制,我们可以借助...

  • fs.close

    fs.close 语法fs.close(fd,callback(err){}); 功能fs.close通过异步的方...

  • NodeJs 中的 fs 模块

    fs 模块部分功能方法 fs.stat 检测是文件还是文件夹; fs.mkdir 创建文件夹; fs.writeF...

  • fs保温板成套设备@永清fs保温板成套设备@多功能fs保温板成套

    嘉禾fs保温板成套设备@永清fs保温板成套设备@多功能fs保温板成套设备一机多用 fs保温板成套设备达到一体化技术...

  • freeswitch配置之nat穿越

    一、路由器去掉upnp和alg功能。 二、在fs上开启rport功能 三、设置rtp自动调整功能 四、设置sip和...

  • node

    fs const fs = require('fs'); const data = fs.readFileSync...

  • 删除

    fs sdavd隐藏 fs sdavd隐藏 fs sdavd隐藏 fs sdavd隐藏 fs sdavd隐藏 va...

  • fs

    1.fs.open ,fs.write, fs.close 2. fs.writeFile 和fs.writeFi...

  • Nodejs

    1、fs文件系统 *.js const fs = require("fs"); // 读取 fs.readFile...

  • 初步认识node.js

    fs系统模块:读取文件: // node 读取文件const fs = require('fs');fs.read...

网友评论

      本文标题:07 - fs 的功能

      本文链接:https://www.haomeiwen.com/subject/zkbiuxtx.html