You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中将蓝牙设备的多组数据保存到单个CSV文件?

解决单文件收集蓝牙数据并保存为CSV的问题

修改思路

  • 固定CSV文件名,避免每次弹窗生成新文件
  • 仅在文件首次创建时写入表头,后续仅追加新数据行
  • 使用文件追加模式,防止覆盖已有数据

修改后的代码

// 定义固定的CSV文件路径(建议作为类成员变量,确保全局复用)
String? _csvFilePath;

setupMode.generateCsv((message) async {
  // 初始化文件路径(仅第一次执行时完成)
  if (_csvFilePath == null) {
    final String directory = (await getApplicationSupportDirectory()).path;
    _csvFilePath = "$directory/collected-data.csv";
  }

  final File file = File(_csvFilePath!);
  final bool fileExists = await file.exists();

  // 提取当前弹窗的数据集
  List<String> dataRow = [
    message.data[1],
    message.data[2],
    message.data[3],
    message.data[4]
  ];

  String csvContent;
  if (!fileExists) {
    // 文件不存在时,写入表头+第一行数据
    List<List<String>> dataWithHeader = [
      ["No.", "X", "Y", "Z", "Z"], // 移除了原代码中Y前的多余空格
      dataRow
    ];
    csvContent = ListToCsvConverter().convert(dataWithHeader);
  } else {
    // 文件已存在时,仅转换当前数据行并追加(单独转一行避免重复表头)
    csvContent = ListToCsvConverter().convert([dataRow]) + "\n";
  }

  // 写入或追加内容到文件
  await file.writeAsString(csvContent, mode: fileExists ? FileMode.append : FileMode.write);
  print("数据已更新到CSV文件");
});

关键修改说明

  1. 固定文件路径:用成员变量_csvFilePath保存唯一的文件路径,不再每次用时间戳生成新文件
  2. 表头仅写入一次:通过file.exists()判断文件是否存在,首次创建时才写入表头
  3. 追加模式写入:使用FileMode.append确保新数据不会覆盖已有内容,仅添加到文件末尾

内容的提问来源于stack exchange,提问作者ASMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:40:25