首先是目录:
然后是配置文件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');
})
}
}
}
});
敲下:
这很美滋滋。