一个简单的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‘);
          })
        }

    }

  }
});

敲下:

这很美滋滋。

时间: 2024-10-13 17:26:59

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

一个简单的Java命令行添加/删除联系人程序(仿C语言)

声明:Java初学者适用 效果图: 联系人Class: public class Contact { private String name; private String number; private ArrayList<Contact> contacts; public ArrayList<Contact> getContacts() { return contacts; } public void setContacts(ArrayList<Contact> c

【CMD】如何批量调用命令行程序

最近在研究守望先锋的解包,然后中途有一个步骤,将00C文件通过一个命令行程序转为obj格式. 但是我遇到一个问题,这个命令行程序一次只能转换一个文件,而00C文件足足有7400个以上,这就难倒我了. 固然这个命令行程序有着源码,但是对于比较弱鸡的我来说,没有什么办法. 后来在朋友的指点下,发现了解决办法,因此在此分享给大家. 在CMD中,有类似于其他语言的for的命令. 其用法是: for %变量 IN (文件通配符) DO (要做的事情) 对于我来用的话,就是这样的 for %i IN (*.

使用.NET Core快速开发一个较正规的命令行应用程序

程序员的世界,命令行工具一直是"体验非常友好"的工具,也能自动化完成很多事情,同时还能结合shell来进行某项任务的批处理(脚本).在.NET Core中,命令行应用程序是基础,但是如何实现像 "cat" 这种功能呢?今天就为大家介绍一个packages来优雅的实现一个命令行应用程序. 一般命令行程序包含什么? 使用方式 帮助信息 子命令 参数 选项 帮助信息 帮助信息如上,介绍了命令的作用和参数.选项作用. 这个是必不可少的. 子命令 一个应用程序打包了多个功能,

软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序

软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c 统计文件字符数支持 -w 统计文件单词数支持 -l 统计文件总行数 2.拓展功能 支持 -a 返回高级选项(代码行 空行 注释行)支持 -s 递归处理符合条件的文件 3.高级功能 支持 -x 程序以图形界面与用户交互 [filename] 是

实现一个自动生成小学四则运算题目的命令行程序

Github项目地址:https://github.com/sumilekaedei/Myapp.git 题目:实现一个自动生成小学四则运算题目的命令行程序. 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e), 其中e, e1

Node.js 命令行程序开发教程

nodejs开发命令行程序非常方便,具体操作方式查看下面几篇文章 http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html 基于node构建命令行工具

详解NodeJS和命令行程序

源起 植根于Unix系统环境下的程序,很多都把贯彻Unix系统设计的哲学作为一种追求.Unix系统管道机制的发明者Douglas McIlroy把Unix哲学总结为三点: 专注做一件事,并做到极致.程序协同工作.面向通用接口,如文本数据流.随着Unix/Linux系统在服务器上影响力越发强大,以及各种跨平台解决方案的发展,这种哲学也被带到了各种平台上.若干年前,笔者第一次接触NodeJS和其包管理解决方案NPM时候,就感觉到其官方倡导的风格,和Unix系统哲学非常契合.近年来,随着NodeJS在

如何使用Docker实现PHP命令行程序的CI/CD?

本文标签: Docker PHP命令行程序的CI/CD Codeship 内容要点: - 使用Jet设置环境并在本地运行测试 - 配置CodeshipPro每次新代码提交时,自动运行测试 - 上一步的测试通过后,自动将更新部署到服务器 持续集成 应用程序和测试套件已经在本地运行,下一步要做的是建立一些持续集成系统.虽然可以设置服务器来执行此操作,但这个过程工作量略大,因此推荐一个像CodeshipPro的服务. 使用Jet进行本地测试 代码提交到Codeship测试前,建议先安装其本地版本的持续

命令行程序增加 GUI 外壳

Conmajia ? 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 GUI 外壳的命令行程序 程序思路是这样的: 通过运行 cmd.exe 来操作命令行,现在要给它一个 GUI. Windows 的命令行 cmd.exe \(\rightarrow\) 新进程 Process \(\rightarrow\) WinForm \(\rightarrow\) GUI 这