HarmonyOS 7 文件与媒体业务 02|文档导入:从文件选择到内容校验
本文面向 HarmonyOS 7 应用开发。涉及系统能力时,以项目实际安装 SDK 的 API、权限及设备支持为准;下文代码注明为局部示例,不构成完整可运行工程。
能选中文件,不代表能直接解析
客户把一个名叫“名单.csv”的文件导入应用,界面提示成功,打开后却只有一列乱码。原因可能是编码,也可能是分隔符,甚至文件本来就不是 CSV。文件选择器解决的是“用户选了什么”,业务还要回答“这个文件是否符合导入约定”。
在鸿蒙应用里,可以通过 Core File Kit 的文件选择能力取得用户选择的资源。不要为了导入一份文档去扫描公共目录。选中以后先检查元信息,再读取有限内容,最后才进入完整解析。

给导入建立明确的合同
假设我们导入客户名单,合同应写清楚:只接受 UTF-8 CSV;首行为姓名、手机号、城市;最多一万行;文件上限由业务确定。大小和行数是产品规则,不是系统默认值。把这些条件放在选择入口附近,错误发生时也容易解释。
导入可拆为“选择—读取—解析—校验—预览—确认写入”。解析阶段只生成候选记录,不直接改变现有名单。预览页显示有效行、重复行和错误行,用户确认之后再提交。
下面是一个纯业务校验片段,不调用文件 API:
interface ContactRow {
name: string;
phone: string;
}
function validateContact(row: ContactRow): string {
if (row.name.trim().length === 0) return '姓名不能为空';
if (!/^1[3-9]\d{9}$/.test(row.phone.trim())) {
return '手机号格式不符合本次导入规则';
}
return '';
}
手机号规则只适用于本例的中国大陆移动号码业务,不应复用成全球电话号码标准。
不要用 split 充当完整 CSV 解析器
字段可能包含引号、逗号和换行。例如地址“上海市,浦东新区”是一个字段,不能按每个逗号拆开。选用解析方案时,必须用这些输入验证。读取大文件还应设置字节上限和记录上限;不要先把全部内容放入内存,再发现超限。
导入时给每行保留原始行号。用户看到“第38行手机号为空”就能定位;只看到“格式错误”只能重新猜。错误报告可提供下载,但应避免在报告中额外扩散不必要的个人信息。
重复导入要提前定义
同一个文件点两遍确认,是新增两份,还是自动去重?建议由稳定的业务键决定,例如客户编号。文件名不能承担这项职责,因为不同文件可以同名,同一文件也可以改名。
如果写入过程中失败,采用事务或可恢复的批次设计,让用户知道已经写入多少、还剩多少。不要返回一个笼统的失败后,让用户再次导入造成重复。
验收时准备空文件、错误扩展名、带引号字段、含表头但无数据、超限文件和重复文件。把这六类都处理清楚,导入功能才从“开发机能跑”变成了“用户能放心使用”。
官方参考
更多推荐



所有评论(0)