跳到主要内容

文件管理

信息

文件管理 (FileManager) 模块提供了在 Omni 小组件中读写文件的能力,支持 iCloud 和本地文件存储。

初始化

FileManager 需要先进行初始化,以指定使用本地存储还是 iCloud 。

本地存储

文件将仅存储在当前设备上。

公共目录

文件存储在 文件 App -> 我的 iPhone -> Omni 目录下。

// 初始化本地 FileManager
const fm = FileManager.local();

// 获取公共文档目录路径
const documentsPath = fm.documents();
console.log(documentsPath);
// 输出 LD:小组件ID(UUID)/
// 对应位置为: iPhone/OmniWidgets/Widgets/小组件ID(UUID)

私有目录

文件存储在应用内部的本地目录中,在 文件 App 中不可见。

// 初始化本地 FileManager
const fm = FileManager.local();

// 获取私有库目录路径
const libraryPath = fm.library();
console.log(libraryPath);

文件操作

读写字符串

适用于读写文本文件,如 txt, json 等。

const fm = FileManager.local();
const docs = fm.documents();
const filePath = docs + "greeting.txt";

// 写入字符串
fm.writeString(filePath, "Hello, Omni!");

// 读取字符串
const content = fm.readString(filePath);
console.log(content); // 输出: Hello, Omni!

读写图片

适用于保存和加载图片。

const fm = FileManager.local();
const docs = fm.documents();
this.imagePath = docs + "background.png";
// 假设 image 是从网络或其它地方获取的图片数据 [Uint8Array]
const image = await new Request("https://example.com/image.png").fetch();
// 保存图片
fm.saveImage(imagePath, image);

// 在图片组件中显示
// 将图片组件类型设置为 "文件",内容填写 imagePath 变量的值即可。

检查文件是否存在

const fm = FileManager.local();
const path = fm.documents() + "config.json";

if (fm.fileExists(path)) {
console.log("文件存在");
} else {
console.log("文件不存在");
}

删除文件

const fm = FileManager.local();
const path = fm.documents() + "temp.txt";

// 确保文件存在再删除
if (fm.fileExists(path)) {
fm.remove(path);
console.log("文件已删除");
}

快捷指令

您可以在 快捷指令 App -> Omni -> 文件管理 分类下找到更多文件操作的示例和快捷指令。

iCloud 云盘

提示

由于小组件本身暂不支持 iCloud 同步所以暂不推荐使用 iCloud

文件将存储在 iCloud Drive 中,可在多个设备间同步。

公共目录

文件存储在 文件 App -> iCloud Drive -> Omni 目录下,用户可以方便地查看和管理。

// 初始化 iCloud FileManager
const fm = FileManager.iCloud();

// 获取公共文档目录路径
const documentsPath = fm.documents();
console.log(documentsPath);
//输出 ID:小组件ID(UUID)/
// 对应位置为: iCloud/OmniWidgets/Widgets/小组件ID(UUID)

私有目录

文件存储在应用内部的 iCloud 目录中,在 文件 App 中不可见,适合存放不希望用户直接操作的缓存或配置文件。

// 初始化 iCloud FileManager
const fm = FileManager.iCloud();

// 获取私有库目录路径
const libraryPath = fm.library();
console.log(libraryPath);