HarmonyOS 鸿蒙Next应用如何加载读取csv文件
HarmonyOS 鸿蒙Next应用如何加载读取csv文件 csv是一种文本文件格式,与json类似。会存储一些文本内容,应用需要读取该文件,进行UI内容得填充等。 文件中的数据是以纯文本形式存储的,并且数据行和字段之间通过特定的分隔符(通常是逗号)分隔。 CSV 文件示例
xx.csv
姓名,年龄,城市
张三,28,北京
李四,34,上海
王五,22,广州
数据结构:
export default class TestObj{
name: string = "";
age: string = "";
city: string = "";
}
在上面得示例中:
第一行是表头,定义了三个字段:姓名、年龄和城市。 接下来的三行是数据记录,每行包含一条记录。 字段之间用逗号分隔。
鸿蒙应用如何加载读取csv文件呢?
更多关于HarmonyOS 鸿蒙Next应用如何加载读取csv文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1. 方式一: 使用三方提供得SDK进行csv文件得解析: “@ohos/opencsv”: “2.0.0”
import { getPath, openSync,CSVReaderBuilder,CSVParser } from '[@ohos](/user/ohos)/opencsv';
getPath().then((path) => {
let rd = openSync (path,'test.csv'/* csv filename */,0o2)
let readerBuilder: CSVReaderBuilder = new CSVReaderBuilder(rd)
let readerbuildcsv = readerBuilder
.withCSVParser(new CSVParser())
.buildCSVReader()
let lines: Array<Array<string>> = null;
lines = readerbuildcsv.readAll() // Read all data in the CSV file.
console.log(lines)
/* [
* [1,'Zhang San',18]
* [2,'Li Si',19]
* [3,'Wang Wu', 20]
* [4,'Zhao Liu', 21]
* ]
*/
readerbuildcsv.close () // Close reading.
})
2. 方式二:
private parseCsvToStrings(csvString: string, delimiter = ','): Array<TestObj> {
const lines = csvString.trim().split('\n');
const headers = lines[0].split(delimiter);
// 将object替换为你的目标对象类型
const data: Array<TestObj> = new Array();
for (let i = 1; i < lines.length; i++) {
const values = lines[i].split(delimiter);
const row: TestObj = new TestObj();
headers.forEach((header, index) => {
let res: string = values[index]?.trim()?.toString() || '';
switch (header.trim()){
case "name":
row.name = res;
break;
case "age":
row.name = res;
break;
case "city":
row.name = res;
break;
}
});
data.push(row);
}
return data;
}
注意: 对于大型CSV文件,手动解析可能会比较慢,而使用优化的第三方库可能会更快。
更多关于HarmonyOS 鸿蒙Next应用如何加载读取csv文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,读取CSV文件主要使用@ohos.file.fs和@ohos.util模块。首先通过fs.openSync获取文件描述符,然后使用fs.readSync读取文件内容为ArrayBuffer。接着,利用util.TextDecoder将二进制数据解码为字符串。最后,对字符串按行分割并解析CSV格式数据。整个过程需注意文件路径权限和异步操作处理。
在HarmonyOS Next中读取CSV文件,可以通过以下步骤实现:
1. 文件放置与访问
将CSV文件放在应用的resources/rawfile目录下,通过ResourceManager访问:
import { resourceManager } from '@kit.AbilityKit';
// 获取资源管理器
const context = getContext(this) as common.UIAbilityContext;
const resourceMgr = context.resourceManager;
// 读取CSV文件
const rawFile = await resourceMgr.getRawFileContent('xx.csv');
const csvText = String.fromCharCode.apply(null, Array.from(rawFile));
2. 解析CSV数据
实现CSV解析函数:
function parseCSV(csvText: string): TestObj[] {
const lines = csvText.split('\n');
const result: TestObj[] = [];
// 获取表头
const headers = lines[0].split(',');
// 解析数据行
for (let i = 1; i < lines.length; i++) {
if (lines[i].trim() === '') continue;
const obj = new TestObj();
const currentLine = lines[i].split(',');
for (let j = 0; j < headers.length; j++) {
const header = headers[j].trim();
const value = currentLine[j] ? currentLine[j].trim() : '';
switch(header) {
case '姓名':
obj.name = value;
break;
case '年龄':
obj.age = value;
break;
case '城市':
obj.city = value;
break;
}
}
result.push(obj);
}
return result;
}
3. 完整示例
import { common } from '@kit.AbilityKit';
export default class CSVReader {
async loadCSVData(): Promise<TestObj[]> {
try {
const context = getContext(this) as common.UIAbilityContext;
const resourceMgr = context.resourceManager;
// 读取文件
const rawFile = await resourceMgr.getRawFileContent('xx.csv');
const csvText = String.fromCharCode.apply(null, Array.from(rawFile));
// 解析数据
return this.parseCSV(csvText);
} catch (error) {
console.error('读取CSV文件失败:', error);
return [];
}
}
private parseCSV(csvText: string): TestObj[] {
// 解析逻辑同上
}
}
4. 在UI中使用
@Entry
@Component
struct CSVDisplay {
@State data: TestObj[] = [];
aboutToAppear() {
const reader = new CSVReader();
reader.loadCSVData().then(result => {
this.data = result;
});
}
build() {
List() {
ForEach(this.data, (item: TestObj) => {
ListItem() {
Text(`${item.name} - ${item.age}岁 - ${item.city}`)
.fontSize(16)
.margin(10)
}
})
}
}
}
注意事项:
- CSV文件需要放在
resources/rawfile目录 - 处理可能的空行和格式异常
- 考虑使用第三方库如
papaparse处理复杂CSV格式 - 大文件建议分块读取避免内存问题
这种方法适用于静态数据加载,如果是动态数据建议使用网络请求或文件系统API。

