Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save zzjtnb/0e67450bec450fb66f78f63bcff5a753 to your computer and use it in GitHub Desktop.

Select an option

Save zzjtnb/0e67450bec450fb66f78f63bcff5a753 to your computer and use it in GitHub Desktop.
nodejs同步遍历目录获取文件(包含路径)
# 第一种
```JavaScript
const fs = require('fs')
const path = require('path');
/**
* 遍历目录里面的所有文件和目录 (同步)
* @param {String} dir 目录名
* @param {Function} callback 找到一个文件时的回调
*/
function eachFileSync(dir, callback) {
fs.readdirSync(dir).forEach((filename) => {
//获取当前文件的绝对路径
const fielder = path.join(dir, filename)
if (fs.statSync(fielder).isDirectory()) {
eachFileSync(fielder, callback)
} else {
callback(filename)
}
})
}
/**
* 列出目录下所有文件和目录 (同步)
* @param {String} dir
* @return {Array} Array
*/
function readSync(dir) {
const fileList = []
eachFileSync(dir, (filename) => {
fileList.push(filename)
})
return fileList;
};
module.exports = {
readSync
}
```
# 第二种
```JavaScript
const fs = require('fs')
const path = require('path');
/**
* 列出目录下所有文件和目录 (同步)
*
* @param {String} dir
* @return {Array}
*/
function readSync(dir) {
var files = [];
eachFileSync(dir, (filename, stats) => {
files.push(filename);
});
return files;
};
/**
* 遍历目录里面的所有文件和目录 (同步)
* @param {String} dir 目录名
* @param {Function} findOne 找到一个文件时的回调
*/
function eachFileSync(dir, findOne) {
var stats = fs.statSync(dir);
// 遍历子目录
if (stats.isDirectory()) {
var files = fullPath(dir, fs.readdirSync(dir));
// var files = fs.readdirSync(dir);
//获取当前文件的绝对路径
files.forEach((f) => {
eachFileSync(f, findOne);
});
} else {
findOne(dir, stats);
}
}
/**
* 将数组中的文件名转换为完整路径
*
* @param {String} dir
* @param {Array} files
* @return {Array}
*/
function fullPath(dir, files) {
return files.map(function (f) {
return path.join(dir, f);
});
}
let data = readSync('../../../_posts')
console.log(data);
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment