CLI文件读取程序

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'))
				})
			}

			
		}
	}

})





 

转载于:https://my.oschina.net/iNiL0119/blog/751839

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值