ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Filer目录操作清单:mkdir/readdir/stat/mkdtemp等8个常用方法完整示例

2026/8/24 8:19:06 拓冰建站 浏览量
Filer目录操作清单:mkdir/readdir/stat/mkdtemp等8个常用方法完整示例 Filer目录操作清单mkdir/readdir/stat/mkdtemp等8个常用方法完整示例【免费下载链接】filerNode-like file system for browsers项目地址: https://gitcode.com/gh_mirrors/fi/filerFiler 是一个为浏览器提供类 Node.js 文件系统fs功能的库让你在前端就能使用mkdir、readdir、stat、mkdtemp等目录操作 API。本文用一份实用清单带你快速掌握 8 个最常用的 Filer 目录操作方法建目录、列目录、查状态、建临时目录、删目录、判断链接、建节点和检查访问权限每个方法都附最小可运行的代码示例。1 分钟了解 Filer 目录操作Filer 把 Node.js 的fs模块搬进了浏览器数据默认存在IndexedDB中路径必须是绝对路径以/开头API 风格与 Node 一致回调式 fs.promises异步版。安装使用很简单npm install filerimport Filer from filer; Filer.FileSystem(myfs, (err, fs) { // fs 就绪可以开始目录操作 }); 提示Filer 不提供同步方法没有mkdirSync也没有递归建目录嵌套目录要一层层创建或用 Shell 的mkdirp见 src/shell/shell.js。核心实现位于 src/filesystem/implementation.js接口封装在 src/filesystem/interface.js。① fs.mkdir创建目录最基础的建目录方法注意父目录必须先存在fs.mkdir(/home, (err) { if (err) throw err; fs.mkdir(/home/carl, (err) { if (err) throw err; // /home/carl 现在存在 }); });Node.js 的可选mode参数在 Filer 中被接受但忽略权限默认全开见 src/filesystem/implementation.js 中mkdir实现约 L1753-L1763。想一步创建a/b/c用 Shell 的sh.mkdirp(/a/b/c, cb)。重复测试可用Filer.FileSystem(fs, { flags: [FORMAT] }, cb)重新格式化文件系统。② fs.mkdtemp一键创建临时目录创建临时目录的标准姿势传入前缀Filer 自动追加 6 位随机字符回调返回新目录完整路径// 生成 /foo-xxxxxx6 位随机字符 fs.mkdtemp(/foo-, (error, path) { console.log(path); // 例如 /foo-a1B2c3 }); // 前缀必须指向已存在的父目录否则报错 fs.mkdtemp(/doesNotExists/foo, (error, path) { // error: EEXIST/ENOTDIR 等 });前缀为空会直接报filename prefix is required实现见 src/filesystem/implementation.jsmkdtemp约 L1775-L1787。测试用例参考 tests/spec/fs.mkdtemp.spec.js。③ fs.readdir读取目录内容返回目录下所有条目文件、目录、符号链接的名字数组自动排除.和..// /docs 下有 a.txt、b.txt、c/ fs.readdir(/docs, (err, files) { if (err) throw err; console.log(files); // [a.txt, b.txt, c] });可选第二个参数options支持withFileTypes: true此时返回Dirent 对象数组可直接entry.isDirectory()判断类型省掉逐个statfs.readdir(/docs, { withFileTypes: true }, (err, entries) { entries.forEach(e { if (e.isDirectory()) console.log(目录:, e.name); else console.log(文件:, e.name); }); });Dirent 实现见 src/dirent.js。④ fs.stat获取文件/目录状态stat返回一个 Stats 对象包含大小、时间戳、权限位和类型判断方法fs.stat(/docs, (err, stats) { if (err) throw err; console.log(stats.size); // 文件大小 console.log(stats.mtime); // 修改时间Date console.log(stats.isDirectory()); // true / false console.log(stats.isFile()); console.log(stats.isSymbolicLink()); });Stats 对象属性与isFile()、isDirectory()、isSymbolicLink()等方法定义在 src/stats.jsisSocket等在 Filer 中恒为false。⑤ fs.lstat不跟踪符号链接的状态lstat与stat的唯一区别遇到符号链接时返回链接本身的信息而不是指向的目标fs.symlink(/target, /data/logs/current, (err) { if (err) throw err; fs.stat(/data/logs/current, (err, stats) { // stats 描述的是目标文件 }); fs.lstat(/data/logs/current, (err, stats) { // stats 描述的是符号链接本身 console.log(stats.isSymbolicLink()); // true }); });判断这个路径到底是不是软链接时记得用lstat。⑥ fs.rmdir删除目录只能删除空目录目录非空会返回错误fs.mkdir(/tmp/work, (err) { if (err) throw err; fs.rmdir(/tmp/work, (err) { if (err) throw err; // /tmp/work 已被删除 }); });要删非空目录需先递归删除内容或用 Shell 的sh.rm系列命令见 src/shell/shell.js。删除逻辑实现于 src/filesystem/implementation.js 的remove_directory约 L490 起。⑦ fs.mknod创建节点文件/目录/链接mknod是更底层的造节点方法第二个参数指定节点类型// type 取值file | directory | symbolic link fs.mknod(/newdir, directory, (err) { if (err) throw err; });日常使用mkdir/writeFile/symlink更直观mknod适合需要精细控制节点类型的场景。类型常量定义在 src/constants.js。⑧ fs.access检查访问权限按权限模式检查路径是否存在、可读、可写、可执行常量挂在fs.constants和fs上fs.access(/docs/a.txt, fs.F_OK, (err) { console.log(err ? 文件不存在 : 文件存在); }); // 组合位掩码检查存在 可读 可写 fs.access(/docs/a.txt, fs.R_OK | fs.W_OK, (err) { if (err) throw err; });四种模式F_OK存在性、R_OK可读、W_OK可写、X_OK可执行。Filer 中权限默认全开此方法主要用于文件存不存在的快速判断。常见问题速查问题原因与对策EEXIST目录已存在先fs.exists或忽略该错误ENOTDIR/ENOENT父目录不存在mkdir/mkdtemp前确保父目录就绪mkdtemp报 prefix 错误前缀不能为空且父目录必须存在想递归建目录用sh.mkdirp()Filer 的fs.mkdir不支持递归想删非空目录先递归清理内容再rmdir或用 Shellsh.rm小结Filer 的目录操作与 Node.js 的fs高度对齐记住这份清单即可覆盖日常需求建mkdir普通目录、mkdtemp临时目录、mknod任意节点读readdir列目录支持withFileTypes查stat跟踪链接、lstat只看链接本身、access权限检查删rmdir仅限空目录想进一步探索 Shell 命令ls、mkdirp、rm等和文件监听能力可参考 src/shell/ 与 src/fs-watcher.js。【免费下载链接】filerNode-like file system for browsers项目地址: https://gitcode.com/gh_mirrors/fi/filer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考