node搭建简单的文件查询

本文详细介绍如何使用Node.js的fs模块进行文件读写操作,包括利用Stream API处理数据流,通过readdir读取目录下所有文件,以及使用fs.stat获取文件元数据。并展示了如何根据用户输入显示特定文件或目录的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里我们需要fs模块

var fs = require("fs");

fs模块允许我们使用Stream API来对数据进行读写操作。与readFile和writeFile方法不一样,他对内的分配不是一次完成的。

var fs = require("fs");
var stdout = process.stdout;//先将输入输出保存在变量里面
var stdin = process.stdin;
var stats = [];
fs.readdir(__dirname, function (err, files) {//读取文件所在的文件夹,files是指获取到的所有文件
    console.log('');
    if (!files.length) {//如果没有文件
        return console.log('\033[31m No files to show!\033[39m\n');
    }
    console.log("   Select which file or directory you want to see\n");
    function file(i) {//对每个文件进行操作
        var filename = files[i];
        fs.stat(__dirname + '/' + filename, function (err, stat) {//stat会给出文件或者目录的元数据
            stats[i] = stat;//将每个文件对应的stat对象保存起来
            if (stat.isDirectory()) {//如果stat是一个文件夹的话
                console.log('      ' + i + '   \033[31m/' + filename + '\033[39m');
            }
            else {//否则就是文件
                console.log('      ' + i + '   \033[90m' + filename + '\033[39m')
            }
            i++;
            if (i == files.length) {//如果所有文件都循环变了
                console.log('');
                read();//那就开始输入序号
            } else {
                file(i);//递归,把每个文件都遍历
            }
        })
    }
    function read() {
        console.log('');
        stdout.write('\033[33m Enter your choice:\033[39m');
        stdin.resume();//开始输入数据
        stdin.setEncoding('utf8');//统一编码
        stdin.on('data', option);//监听输入数据,回车键结束回调函数
    }
    function option(data) {
        var filename = files[Number(data)];//记录选择的文件序号
        if (!filename) {//如果不存在这个文件
            stdout.write('   \033[33m Enter your choice:\033[39m');
        }
        else {
            stdin.pause();//暂停流,退出程序
            console.log(data);//打印出序号
            if (stats[Number(data)].isDirectory()) {//如果这是一个文件夹的话
                fs.readdir(__dirname + '/' + filename, function (err, files) {//继续读取文件夹的信息
                    console.log('');
                    console.log('   (' + files.length + ' files');
                    files.forEach(function (file) {
                        console.log('    -  ' + file);
                    });
                    console.log('');
                });
            } else {
                fs.readFile(__dirname + '/' + filename, 'utf8', function (err, data) {//否则就读取文件内容
                    console.log('');
                    console.log('\033[90m' + data.replace(/(.*)/g, '   $1') + '\033[39m');
                });
            }
        }
    }
    file(0);//第一次调用函数
})

1.这里面有个stdin.pause(),如果没有这条语句的话,就是下面的现像,会一直让你输入数据

2.__dirname就是当前文件的所处的位置

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值