鸿蒙Next提供精准的文件空间管理能力,助开发者实时监控存储使用情况。本文解析核心接口、统计方法与优化策略~
一、核心能力:空间管理的「数字仪表盘」📊
鸿蒙通过两大模块实现存储精细化管理:
- @ohos.file.statvfs:获取文件系统级数据(总空间/剩余空间/节点数)
- @ohos.file.storageStatistics:获取应用级数据(安装包/缓存/用户数据大小)
二、关键接口速查表🚀
功能 | 接口/方法 | 返回值类型 | 示例用途 |
---|---|---|---|
获取应用存储统计 | storageStatistics.getCurrentBundleStats() |
BundleStats |
统计安装包(appSize )、缓存(cacheSize ) |
获取文件系统空间 | statvfs.getFreeSize(path) |
number (字节) |
检测filesDir 剩余空间 |
遍历目录大小 | File.traverseDir(dirPath, callback) |
- | 递归计算目录内所有文件大小 |
三、实战:空间统计代码示例📈
1. 应用存储详情统计
typescript
import { storageStatistics } from '@ohos.file.storageStatistics';
// 获取应用安装包、缓存、数据大小
storageStatistics.getCurrentBundleStats((err, stats) => {
if (!err) {
console.log(`安装包大小: ${stats.appSize / 1024 / 1024} MB`);
console.log(`缓存大小: ${stats.cacheSize / 1024 / 1024} MB`);
console.log(`用户数据大小: ${stats.dataSize / 1024 / 1024} MB`);
}
});
2. 文件系统空间检测
typescript
import { statvfs } from '@ohos.file.statvfs';
import { getContext } from '@ohos.app.ability';
const checkStorage = () => {
const context = getContext() as common.UIAbilityContext;
const filesPath = context.filesDir; // 应用私有文件目录
const cachePath = context.cacheDir; // 缓存目录
// 检测文件系统总空间与剩余空间
statvfs.getTotalSize(filesPath, (err, total) => {
statvfs.getFreeSize(filesPath, (err, free) => {
console.log(`文件系统总空间: ${total / 1024 / 1024} MB`);
console.log(`剩余空间: ${free / 1024 / 1024} MB`);
});
});
};
3. 大文件扫描(递归遍历目录)
typescript
import { File } from '@ohos.file';
async function scanLargeFiles(dir: string, threshold = 10 * 1024 * 1024) {
const files = await File.list(dir);
for (const file of files) {
const filePath = `${dir}/${file}`;
const stats = await File.stat(filePath);
if (stats.isDirectory) {
await scanLargeFiles(filePath, threshold); // 递归子目录
} else {
if (stats.size > threshold) {
console.log(`大文件发现: ${filePath}, 大小: ${stats.size / 1024 / 1024} MB`);
}
}
}
}
四、优化策略:释放存储空间的「组合拳」🎯
1. 缓存管理三原则
策略 | 实现方式 | 示例场景 |
---|---|---|
定期清理 | 设置定时器或监听低内存事件触发清理 | 每周自动清理未使用的缓存图片 |
分级存储 | 热数据(高频)存内存,冷数据存磁盘 | 聊天表情包缓存分级 |
按类型清理 | 优先删除可重建的临时文件(如日志/临时图片) | 清理temp/ 目录下所有文件 |
2. 数据压缩方案
typescript
// 图片压缩示例(使用Tinify库)
import { Tinify } from '@ohos.compression';
async function compressImage(srcPath, destPath) {
const compressedData = await Tinify.compressFile(srcPath, {
format: 'webp',
quality: 80
});
await File.writeFile(destPath, compressedData);
await File.delete(srcPath); // 删除原图
}
3. 数据库优化
typescript
// SQLite数据库压缩(清理空闲页)
import { Database } from '@ohos.sqlite';
const db = Database.open('app.db');
db.execSQL('VACUUM;'); // 压缩数据库文件
五、监控与预警:存储健康的「报警器」🚨
1. 阈值预警机制
typescript
// 剩余空间不足10%时触发清理
statvfs.getFreeSize(filesPath, (err, free) => {
const threshold = total * 0.1;
if (free < threshold) {
cleanCache(); // 调用清理函数
showToast('存储空间不足,已自动清理缓存');
}
});
2. 用户引导策略
- 在设置页显示存储使用详情
- 提供「一键清理」按钮触发
File.deleteAllCache()
- 大文件列表展示并支持手动删除
总结:空间管理「三步法」
- 统计分析 :用
storageStatistics
定位空间占用大户 - 策略优化:按「缓存分级+数据压缩+数据库瘦身」组合优化
- 动态监控:设置阈值预警,自动/手动释放空间