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

首先是目录:

 

然后是配置文件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');
          })
        }

    }

  }
});

敲下:

 

 这很美滋滋。

posted @ 2017-11-06 18:19  麦丽素  阅读(427)  评论(0编辑  收藏  举报