一个简单的Node命令行程序:文件浏览

本文介绍了一个使用Node.js实现的命令行文件浏览器应用。该应用通过读取目录内容并以交互方式展示给用户,允许用户浏览文件夹和查看文件内容。支持不同颜色显示文件类型,并能递归地进入子目录。

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

首先是目录:

 

然后是配置文件package.json:

{
  "name" : "fs-explorer",
  "version" : "0.0.1",
  "description" : "a command-file file explorer"
}

 

然后是index.js:

/*
*模块依赖
*/
var fs = require('fs');
var  stdin = process.stdin;//输入流
var  stdout = process.stdout;//输出流
//读取当前目录
fs.readdir(__dirname,function(err,files){
  if(err){
    console.log(err);
  }
  console.log('');
  if(!files.length){
    return console.log("这个文件夹是空的");
  }
  console.log('选择你想要查看的文件');
  var stats = [];//这个数组是存放当前目录列表

  function file(i){
    var filename = files[i];
    //查看当前目录是否存在
    fs.stat(__dirname + '/' + filename,function(err,stat){
      stats[i] = stat;//把当前目录放进去
      if(stat.isDirectory()){//判断是不是一个文件夹,如果是的话就在后面加上 /
        console.log('      ' + i + '    \033[36m' + filename + '/\033[39m');
      }else{
        console.log('      ' + i + '    \033[90m' + filename + '\033[39m');
      }
      i++;//自增
      if(i == files.length){//如果是当前目录的最后一个文件
        read();//开始监听

      }else{//不是的话就继续遍历
        file(i)
      }
    });
  }
  file(0);//从0开始遍历

  function read(){
    console.log('');
    stdout.write('      \033[33m输入你的选择:\033[39m');//输出
    stdin.resume();//等待用户输入
    stdin.setEncoding('utf8');//设置编码
    stdin.on('data',option);//监听事件
  }

  function option(data){
    var filename = files[Number(data)];

    if(!files[Number(data)]){
      stdout.write("输入您的选择哦")
    } else {
      stdin.pause();//暂停流
      if(stats[Number(data)].isDirectory()){
          fs.readdir(__dirname + '/' + filename ,function(err,files){
            console.log('');
            console.log("("+ filename.length +" files)");
            files.forEach(function(file){
              console.log('-' + file);
            });
            console.log('');
          })
        } else {
          //读取选择的文件
          fs.readFile(__dirname + '/' + filename,'utf8',function(err,data){
            console.log('');
            console.log('\330[90m' + data.replace(/(.*)/g,' $1') + '\033[39m');
          })
        }

    }

  }
});

敲下:

 

 这很美滋滋。

转载于:https://www.cnblogs.com/jjucap/p/7794516.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值