// 遞歸目錄樹(只能用同步,用異步會出現後面的文件比前面的文件先輸出,順序會亂。) // 默認按照ASCII碼的順序,例如js裏面的sort()函數。 // 先寫一層的狀況 // 抽象遞歸參數 // 找到突破點(避免死循環) // 本身調本身,某種狀況(確定會存在的)不調用 const fs = require('fs'); const path = require('path'); // 獲取當前有沒有傳入目標路徑 var target = path.join(__dirname, process.argv[2] || './'); function load(target, depth) { // depth 0 = '' // depth 1 = '│ ' // depth 2 = '│ │ ' var prefix = new Array(depth + 1).join('│ ');// join()函數的妙用 // 讀取一個目錄的內容,返回一個不包括 '.' 和 '..' 的文件名的數組。 var dirinfos = fs.readdirSync(target); var dirs = []; var files = []; dirinfos.forEach(info=> { // 返回一個 fs.Stats 實例 var stats = fs.statSync(path.join(target, info)); if (stats.isFile()) { files.push(info); } else { dirs.push(info); } }); dirs.forEach(dir=> { console.log(`${prefix}├─${dir}`); // node_modules // 當前是一個目錄 須要深刻進去 load(path.join(target, dir), depth + 1); }); var count = files.length - 1; // 此處必須-1與下面的count--想對應 files.forEach(file=> { var temp = count-- ? '├' : '└'; // 三元運算符的妙用 console.log(`${prefix}${temp}─${file}`); }); } load(target, 0); // // 無級分類
flie.jsjavascript
node file.jsjava
依賴了 fsnode