var fs=require("fs");
var path=require("path");
function test(dirName){
if(!fs.existsSync(dirName)) throw new Error("目录不存在");
let files = [];
fs.readdirSync(dirName).map(value=>{
var stats=fs.statSync(path.join(dirName,value));
let obj={
fileName:value
}
if(stats.isFile()){
obj.type="file";
}
if(stats.isDirectory()){
obj.type="Dir";
obj.children =test(path.join(dirName,value));
}
files.push(obj);
})
return files;
}
fs.writeFileSync("./files.json",JSON.stringify(test(__dirname),null,2))
// 就是给一个文件夹,把里面的文件和文件夹区分出来
// 读取文件用 fs模块 读取文件夹也用fs模块
var fs = require('fs');
// fs.readdir(path[, options], callback)
// 读取一个目录的内容。 回调有两个参数 (err, files),其中 files 是目录中不包括 '.' 和 '..' 的文件名的数组。
// [ '123.css', '123.html', '345', '456', 'package.json' ]
fs.readdir('./abc',function (err, files) {
if (err) throw err;
// console.log(files);
var dir = [];
var filePath = [];
// files 是一个数组 这个数组里面包含了所有的文件以及文件夹
// 现在要区分文件还是文件夹
function itear(i){
// 递归终止条件
if(files.length == i){
console.log(dir);
console.log(filePath);
return;
}
var file = files[i];
var path = './abc/' + file;
// 因为这个是异步的
fs.stat(path,function (err,stats) {
if (stats.isDirectory()){
// 目录
dir.push(path);
}else if (stats.isFile()) {
filePath.push(path);
}
// 再次执行函数
itear(i+1);
})
}
itear(0);
});