JavaScript实现本地文件扫描
AI-摘要
Kimbleex GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
JavaScript实现本地文件扫描
Kimbleex跟一个老前端在做一个NAS
云存储的工具,涉及到了本地文件扫描,作为一个前端菜鸡,我去了解了一下功能的具体原理,然后自己使用JavaScript
实现了一下,现在做一个记录。
原理
说白了,就是普通的递归查找,输入所需要查找的文件目录,使用Node
的fs
模块读取目录,然后递归查找子目录,通过isDirectory
方法判断子目录中是否也存在文件夹,然后一直重复即可,直到找到所有文件。
预期结果
我是想返回一个类似于JSON
的变量,预期的结构为:
{ |
在这个类似于JSON
变量中,每一个Key
代表着一个目录,对应的Value
对应着这个目录下的所有文件和子目录,并且都有标签与其对应,floder
表示这是一个目录,而file
表示这是一个文件。这样的标记有利于后续在前端页面中展示的时候对图标的选择等。
代码实现
写来写去,为了让最后结果能够集大成,选择了使用柯里化 Currying
和闭包
来实现这个功能。
首先定义一个父函数scanFile
,它声明一个fileList
变量,用来保存最后的结果。
async function scanFile() { |
然后定义一个子函数scan
,用来递归查找目录。
async function scan(dir){ |
上述代码中,readdir
是Node
的fs
模块中的方法,用来读取目录,withFileTypes: true
表示返回的是一个Dirent
对象,这个对象中包含了文件名、文件类型等信息。使用files
保存读取到的文件列表,然后遍历这个列表,如果当前遍历到的文件是一个目录,则递归调用scan
函数,否则将文件名和类型添加到fileList
中。最后返回fileList
。
然后,在scanFile
函数中返回scan
函数。
完整代码:
import { readdir } from 'node:fs/promises'; |
可以尝试打印一下结果。
const result = await (await scanFile())("D:/git/"); |
输出为:
{ |
可以看到,scanFile
函数返回了一个函数,这个函数返回了一个fileList
对象,这个对象中保存了所有目录和文件的信息。
本地目录结果为:
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果