news 2026/8/24 8:18:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Filer目录操作清单:mkdir/readdir/stat/mkdtemp等8个常用方法完整示例

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

【免费下载链接】filerNode-like file system for browsers项目地址: https://gitcode.com/gh_mirrors/fi/filer

Filer 是一个为浏览器提供类 Node.js 文件系统(fs)功能的库,让你在前端就能使用mkdirreaddirstatmkdtemp等目录操作 API。本文用一份实用清单,带你快速掌握 8 个最常用的 Filer 目录操作方法:建目录、列目录、查状态、建临时目录、删目录、判断链接、建节点和检查访问权限,每个方法都附最小可运行的代码示例。

1 分钟了解 Filer 目录操作

Filer 把 Node.js 的fs模块搬进了浏览器:数据默认存在IndexedDB中,路径必须是绝对路径(以/开头),API 风格与 Node 一致(回调式 +fs.promises异步版)。

安装使用很简单:

npm install filer
import 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:不跟踪符号链接的状态

lstatstat的唯一区别:遇到符号链接时返回链接本身的信息,而不是指向的目标:

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.constantsfs上:

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 命令(lsmkdirprm等)和文件监听能力,可参考 src/shell/ 与 src/fs-watcher.js。

【免费下载链接】filerNode-like file system for browsers项目地址: https://gitcode.com/gh_mirrors/fi/filer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 8:17:17

Unity构建优化:七步拆解慢速瓶颈

一个让人抓狂的日常 你改了一行 C# 代码,点下 Build,然后……去泡了杯咖啡。回来发现还在转。 或者更糟:你只是想出个测试包给策划看看,结果构建跑了二十分钟,中间还卡在一个叫 “IL2CPP” 的阶段一动不动。 Unity 慢&…

作者头像 李华
网站建设 2026/8/24 8:15:11

时序图与协同智能体检测:从MoltGraph数据集看动态图分析技术

1. 从“水军”到“协同行为”:为什么我们需要MoltGraph这样的数据集?在社交媒体和在线内容平台的分析工作中,我们经常遇到一个棘手的问题:如何区分真实的、自发的用户讨论与有组织、有目的的“协同行为”?这里的“协同…

作者头像 李华
网站建设 2026/8/24 8:13:35

后处理全屏:揭秘游戏画面的终极调色师

一、先搞懂:后处理到底在处理什么? 大白话: “后处理”(Post-processing)顾名思义——在场景渲染完之后,再处理一遍。 关键在于:它处理的对象不是 3D 模型、不是几何体,而是已经渲染好的那一整张 2D 图片。 第一步:正常渲染场景相机拍下所有 3D 物体 → 生成一张 2…

作者头像 李华
网站建设 2026/8/24 8:13:26

2026届AI校招:大模型算法岗薪资与技能解析

1. 2026届校招AI人才市场现状分析2026届校园招聘季已经拉开帷幕,AI领域特别是大模型算法岗位的薪资水平再次刷新行业认知。根据最新市场调研数据显示,头部科技企业为应届毕业生开出的算法工程师起薪普遍达到3.5-5万元/月,部分紧缺岗位甚至出现…

作者头像 李华