Flutter for OpenHarmony: Flutter 三方库 glob 像在 Linux 终端一样灵活匹配鸿蒙应用文件路径(大规模文件管理神器)

Flutter for OpenHarmony: Flutter 三方库 glob 像在 Linux 终端一样灵活匹配鸿蒙应用文件路径(大规模文件管理神器)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

前言

在 OpenHarmony 应用开发中,处理大规模的文件操作是常见的需求。例如:

  1. 清理缓存:需要删除 cache 目录下所有的 .tmp 文件。
  2. 多媒体扫描:需要找出 DCIM 目录及其所有子目录下包含 2026-02.jpg 片。
  3. 打包工具:需要排除所有 .dart 源文件但保留 .js 产物。

如果使用原生的 Directory.list 配合手写正则匹配,代码不仅晦涩难懂,且效率低下。glob 系统通过标准的通配符(Wildcard)语法(如 **/*.png),为你提供了一套极其直观、强大的跨平台文件定位方案。


一、通配符逻辑解析

glob 将模式字符串转化为高效的路径扫描递归机。

排除

表达式: 'lib/**/*.dart'

Glob 匹配引擎

匹配 [lib/a.dart, lib/src/b.dart]

忽略 [ohos/entry/x.cpp]


二、核心 API 实战

2.1 递归查找特定文件

import'package:glob/glob.dart';import'package:glob/list_local_fs.dart';// 💡 必须引入此扩展以支持本地文件系统voidfindImages(){// 💡 定义模式:在 assets 下递归找所有 png 或 jpgfinal imageFinder =Glob("assets/**/*.{png,jpg}");// 💡 全局列出for(var entity in imageFinder.listSync()){print('发现鸿蒙资源文件: ${entity.path}');}}
在这里插入图片描述

2.2 逻辑排除与组合

// 排除 test 目录下的所有临时文件final cleaner =Glob("test/**/!(*.temp)");
在这里插入图片描述

三、常见应用场景

3.1 鸿蒙端侧“文件管理器”核心

实现全局搜索功能。用户输入 *.pdf,后台利用 glob 库快速在用户的 Documents 目录进行零配置匹配检索。

3.2 自定义构建任务

在开发针对鸿蒙平台的 Flutter 辅助脚本时,利用 glob 快速收集需要混淆的代码路径或需要压缩的图片路径,极简地替代复杂的 Shell 指令。


四、OpenHarmony 平台适配

4.1 适配鸿蒙沙箱目录路径

💡 技巧:鸿蒙的应用沙箱路径往往带有独特的哈希前缀或特定的挂载点(如 /data/storage/el2/base/...)。glob 基于 Dart 的 io 实现,它不需要平台特定的 FFI 接口,因此在鸿蒙的文件层级中具有完美的“穿透力”。只要提供正确的根路径,通配符匹配在鸿蒙真机上表现得如履平地。

4.2 性能优化建议

大规模递归扫描会触及磁盘 IO。在鸿蒙设备上运行长路径匹配时,建议使用 list() 的非阻塞异步方法,配合 take() 限流,防止因一次性列出过多文件对象而导致的鸿蒙应用内存抖动。


五、完整实战示例:鸿蒙日志自动清理引擎

本示例展示如何利用 glob 匹配并删除七天前的过期日志文件。

import'dart:io';import'package:glob/glob.dart';import'package:glob/list_local_fs.dart';classOhosStorageCleaner{/// 清理过期的加密日志voidpurgeOldLogs(String baseDir){print('🧹 正在扫描鸿蒙文件系统冗余节点...');// 💡 匹配所有 log 目录下,文件名包含 'old_' 的 .dat 文件final logPattern =Glob("$baseDir/logs/**/old_*.dat"); int count =0;for(var entity in logPattern.listSync()){if(entity isFile){// 执行删除 entity.deleteSync(); count++;}}print('✅ 清理完毕:共释放了 $count 个鸿蒙存储节点');}}voidmain(){final cleaner =OhosStorageCleaner(); cleaner.purgeOldLogs('/data/storage/el2/base/files');}
在这里插入图片描述

六、总结

glob 软件包是 OpenHarmony 开发者在文件 IO 领域的“瑞士军刀”。它将原本枯燥、易错的递归目录遍历逻辑,转化为了几乎所有人都能读懂的声明式通配符表达式。在开发具有复杂文件整理、大规模资源预处理能力的鸿蒙原生应用时,掌握并集成这套“路径魔法”,是提升工程整洁度和开发效能的必由之路。

Read more

Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管 在当今软件开发高速迭代的时代,企业对「私有化代码仓库托管」的需求愈发迫切。通过在公司服务器部署 Gitea,不仅可以实现“Git 私有化托管”与“代码安全隔离”,还能够结合 CI/CD 流水线快速交付,彻底摆脱公有云成本与权限风控的双重烦恼。本教程将手把手教您在 Ubuntu 20.04 环境下,完成从服务器准备、依赖安装到域名配置、SSL 加密、自动化运维的一整套 “Gitea 服务器搭建” 方案,确保您能够快速上手 “Gitea 安装教程” 并实现“企业级 Git 自托管”最佳实践。 本文详细介绍在公司服务器上从零开始部署 Gitea 服务的全流程。全程使用 Ubuntu 20.04 LTS

By Ne0inhk
ClaudeCode武装三件套:Ghostty + Yazi + Lazygit 打造高效开发环境

ClaudeCode武装三件套:Ghostty + Yazi + Lazygit 打造高效开发环境

引言:多终端切换之痛 在终端里深度使用 Claude Code 一段时间后,你很快会遇到一个现实问题: 场景:前后端需求同时开发,一个终端跑 Claude Code,另一个查看日志,还需要随时管理文件、提交代码……多个终端窗口切来切去,既麻烦又不直观,完全看不到各终端的实时状态。 以前我的解法是 tmux。但 tmux 毕竟是上个世纪的工具:命令多、记不住,界面也不美观,感觉像在用古董。 直到我在 X 上看到 Claude Code 之父 Boris 的推文,他在用 Ghostty。我去试了试,然后又发现了 Yazi 和 Lazygit,这套组合彻底改变了我的终端工作流。 今天我们就来聊这个终端三件套: * 🖥️ Ghostty:现代化终端模拟器,原生支持多标签、分屏 * 📂 Yazi:用

By Ne0inhk
从DeepSeek-R1爆火看开源大模型推理优化:我在脉脉找到的实战方案

从DeepSeek-R1爆火看开源大模型推理优化:我在脉脉找到的实战方案

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 文章目录: * 【前言】 * 一、场景痛点直击:两个行业的共性困境与差异化难题 * 1. 电商智能客服场景(日均请求10万+) * 2. 金融智能咨询场景(日均请求3万+) * 二、实战突破:分场景落地优化方案(附完整代码+流程图) * 1. 核心优化架构总览(流程图) * 2. 分场景核心代码实现(新增4个关键代码片段) * (1)量化分级实现(适配金融场景精度需求) * (2)多租户隔离与共享实例实现(适配电商、金融双场景) * (3)边缘节点轻量化部署代码(适配电商峰值卸载) * (4)动态批处理与负载调度优化(核心优化代码) * 3. 优化效果对比表(分场景) * 三、脉向AI核心价值:技术人破圈的“

By Ne0inhk