import preferences from '@ohos.data.preferences'; import common from '@ohos.app.ability.common'; // 定义支持的数据类型 type ValueType = number | string | boolean | number[] | string[] | boolean[]; type PreferencesData = Record; class PreferencesUtil { // 缓存多个 Preferences 实例 private prefMap: Map = new Map(); /** * 加载 Preferences 文件 * @param context 应用上下文 * @param name 文件名(如 'userConfig') */ async loadPreference(context: common.Context, name: string): Promise { try { const pref = await preferences.getPreferences(context, name); this.prefMap.set(name, pref); console.log(`[PreferencesUtil] 加载文件 "${name}" 成功`); } catch (err) { console.error(`[PreferencesUtil] 加载失败: ${JSON.stringify(err)}`); } } /** * 写入数据(自动刷盘) * @param fileName 文件名 * @param key 键名 * @param value 值(支持6种类型) */ async put(fileName: string, key: string, value: ValueType): Promise { const pref = this.prefMap.get(fileName); if (!pref) { console.warn(`[PreferencesUtil] 文件未加载: ${fileName}`); return; } try { await pref.put(key, value); await pref.flush(); // 立即持久化 console.log(`[PreferencesUtil] 保存 ${fileName}.${key} = ${value}`); } catch (err) { console.error(`[PreferencesUtil] 写入失败: ${JSON.stringify(err)}`); } } /** * 读取数据(带默认值) * @param fileName 文件名 * @param key 键名 * @param defaultValue 默认值 * @returns 类型安全的返回值 */ async get( fileName: string, key: string, defaultValue: T ): Promise { const pref = this.prefMap.get(fileName); if (!pref) { console.warn(`[PreferencesUtil] 文件未加载: ${fileName}`); return defaultValue; } try { const value = await pref.get(key, defaultValue); console.log(`[PreferencesUtil] 读取 ${fileName}.${key} = ${value}`); return value as T; // 泛型类型断言 } catch (err) { console.error(`[PreferencesUtil] 读取失败: ${JSON.stringify(err)}`); return defaultValue; } } /** * 删除指定键值 * @param fileName 文件名 * @param key 键名 */ async delete(fileName: string, key: string): Promise { const pref = this.prefMap.get(fileName); if (!pref) return; try { await pref.delete(key); await pref.flush(); console.log(`[PreferencesUtil] 删除键值: ${fileName}.${key}`); } catch (err) { console.error(`[PreferencesUtil] 删除失败: ${JSON.stringify(err)}`); } } /** * 清空文件数据 * @param fileName 文件名 */ async clear(fileName: string): Promise { const pref = this.prefMap.get(fileName); if (!pref) return; try { await pref.clear(); await pref.flush(); console.log(`[PreferencesUtil] 已清空文件: ${fileName}`); } catch (err) { console.error(`[PreferencesUtil] 清空失败: ${JSON.stringify(err)}`); } } } // 导出单例(全局使用) const preferencesUtil = new PreferencesUtil(); export default preferencesUtil;