六爱资源网移动端导航标志 六爱资源网
音乐播放器控制按钮 - 点击播放或暂停网站背景音乐

Nodejs 获取指定文件夹下所有文件及文件夹

做项目时候经常会遇到获取本地某个文件夹下所有内容的情况;下面简单列举两种方法。

Nodejs 获取指定文件夹下所有文件及文件夹 - 帖子图片1

## 方法一 文件及文件夹扁平化输出

### 代码

```javascript

const fs = require('fs');

function getFilesAndFoldersInDir(path) {
const items = fs.readdirSync(path);
const result = [];
items.forEach(item => {
const itemPath = `${path}/${item}`;
const stat = fs.statSync(itemPath);
if (stat.isDirectory()) {
let data = {
// 文件夹
type: 'folder',
name: item
}
let children = getFilesAndFoldersInDir(itemPath)
if (children && children.length) {
data.children = children
}
result.push(data);
} else {
// 文件
result.push({
type: 'file',
name: item
});
}
});
return result;
}

let list = getFilesAndFoldersInDir('/jay')
console.log(list)

输出结构

[
{
"size": 1224860,
"name": "周杰伦-Intro.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-Intro.mp3"
},
{
"size": 7432949,
"name": "周杰伦-Mojito.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-Mojito.mp3"
},
{
"size": 9866516,
"name": "周杰伦-不爱我就拉倒.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-不爱我就拉倒.mp3"
},
{
"size": 9401524,
"name": "周杰伦-倒影.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-倒影.mp3"
},
{
"size": 10831295,
"name": "周杰伦-等你下课 (with 杨瑞代).mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-等你下课 (with 杨瑞代).mp3"
},
{
"size": 10346118,
"name": "周杰伦-错过的烟火.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录1/周杰伦-错过的烟火.mp3"
},
{
"size": 10687350,
"name": "周杰伦-我是如此相信.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-我是如此相信.mp3"
},
{
"size": 9794418,
"name": "周杰伦-最伟大的作品.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-最伟大的作品.mp3"
},
{
"size": 7504609,
"name": "周杰伦-粉色海洋.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-粉色海洋.mp3"
},
{
"size": 10316859,
"name": "周杰伦-红颜如霜.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-红颜如霜.mp3"
},
{
"size": 8926108,
"name": "周杰伦-说好不哭 (with 五月天阿信).mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-说好不哭 (with 五月天阿信).mp3"
},
{
"size": 10664502,
"name": "周杰伦-还在流浪.mp3",
"path": "/jay/《最伟大的作品》专辑MP3/目录2/周杰伦-还在流浪.mp3"
}
]

方法二 文件及文件夹以树状结构输出

代码

// 获取文件夹下所有文件
function getFilesAndFoldersInDir(path) {
const filesList = [];
readFile(path, filesList);
return filesList;
}

// 遍历读取文件
function readFile(path, filesList) {
const files = fs.readdirSync(path); // 需要用到同步读取
files.forEach(walk);

function walk(file) {
const states = fs.statSync(path + '/' + file);
if (states.isDirectory()) {
readFile(path + '/' + file, filesList);
} else {
// 创建一个对象保存信息
const obj = {};
obj.size = states.size; // 文件大小,以字节为单位
obj.name = file; // 文件名
obj.path = path + '/' + file; // 文件绝对路径
filesList.push(obj);
}
}
}

let list = getFilesAndFoldersInDir('/jay')
console.log(list)

输出结构

[
{
"type": "folder",
"name": "《最伟大的作品》专辑MP3",
"children": [
{
"type": "folder",
"name": "目录1",
"children": [
{
"type": "file",
"name": "周杰伦-Intro.mp3"
},
{
"type": "file",
"name": "周杰伦-Mojito.mp3"
},
{
"type": "file",
"name": "周杰伦-不爱我就拉倒.mp3"
},
{
"type": "file",
"name": "周杰伦-倒影.mp3"
},
{
"type": "file",
"name": "周杰伦-等你下课 (with 杨瑞代).mp3"
},
{
"type": "file",
"name": "周杰伦-错过的烟火.mp3"
}
]
},
{
"type": "folder",
"name": "目录2",
"children": [
{
"type": "file",
"name": "周杰伦-我是如此相信.mp3"
},
{
"type": "file",
"name": "周杰伦-最伟大的作品.mp3"
},
{
"type": "file",
"name": "周杰伦-粉色海洋.mp3"
},
{
"type": "file",
"name": "周杰伦-红颜如霜.mp3"
},
{
"type": "file",
"name": "周杰伦-说好不哭 (with 五月天阿信).mp3"
},
{
"type": "file",
"name": "周杰伦-还在流浪.mp3"
}
]
}
]
}
]

打赏列表 共 0 金币

暂无打赏记录,快来成为第一个打赏的人吧!

回复

全部评论 (0)

暂无评论,来发表第一条评论吧!

发表评论

剩余 100 字符

意见反馈

×
0/500字
页面信息:

分享海报

×
免费资源,共享精神
页面标题将在这里显示
页面描述内容将在这里显示,如果没有描述则显示默认文字
生成中...

长按识别二维码打开

查看完整内容

生成时间