Filer目录操作清单:mkdir/readdir/stat/mkdtemp等8个常用方法完整示例
【免费下载链接】filerNode-like file system for browsers项目地址: https://gitcode.com/gh_mirrors/fi/filer
Filer 是一个为浏览器提供类 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-xxxxxx(6 位随机字符) 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()判断类型,省掉逐个stat:
fs.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.js(isSocket等在 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),仅供参考