var fs = require('fs') // fs模块是唯一一个同时提供同步和异步的API模块
stdin = process.stdin
stdout = process.stdout
var stats = []
/*
// 获取文件列表
// 异步方式1
fs.readdir(".",function(err,files) {
console.log(files)
})
// 或者异步方式2
fs.readdir(__dirname,function(err,files) {
console.log(files)
})
// 同步方式
console.log( fs.readdirSync(__dirname) )
*/
fs.readdir(process.cwd(), function(err, files) {
console.log('')
if (!files.length) {
return console.log('No files to show!\n')
}
console.log('Select which file or directory you want to see\n')
file(0)
function file(i) {
var filename = files[i]
// 获取文件或者目录的元数据
fs.stat(__dirname + '/' + filename, function(err, stat) {
stats[i] = stat
if (stat.isDirectory()) {
console.log(' ' + i + ' ' + filename)
} else {
console.log(' ' + i + ' ' + filename)
}
if (++i == files.length) {
read()
} else {
file(i)
}
})
}
function read() {
console.log('')
stdout.write('Enter your choice: ')
stdin.resume() // 等待用户输入
process.stdin.setEncoding('utf8')
// 监听用户输入事件
stdin.on('data',option)
}
function option(data) {
// 判断用户输入的下标是否符合文件列表files中的下标
var filename = files[Number(data)]
if ( !filename ) {
stdout.write( 'Enter your choice: ')
} else {
stdin.pause()
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(data.replace(/(.*)/g, ' $1'))
})
}
}
}
})