如何在Flutter中从设备存储中读取CSV文件

时间:2020-10-05 05:03:44

标签: csv flutter dart

我想从Flutter中的CSV文件将数据导入Firebase数据库。因此,我使用文件选择器从设备中选择了.CSV文件。现在如何从该文件读取数据?

2 个答案:

答案 0 :(得分:1)

首先从dart包中导入file_picker和CSV包。比定义方法pickFile()如下。它将从设备存储中选择文件,选择后将打印数据。应该调用pickFile()函数以获得结果。

import 'package:file_picker/file_picker.dart';
import 'package:csv/csv.dart';

pickFile() async {
   FilePickerResult result = await FilePicker.platform.pickFiles();
   if (result != null) {
     PlatformFile file = result.files.first;

     final input = new File(file.path).openRead();
     final fields = await input
         .transform(utf8.decoder)
         .transform(new CsvToListConverter())
         .toList();

     print(fields);
   }
 }

答案 1 :(得分:0)

您需要首先使用块软件包CsvDriver。 https://www.nuget.org/packages/CsvHelper

在此处查看文档以了解有关驱动程序的更多信息:https://joshclose.github.io/CsvHelper/

然后使用以下源代码(全部自定义):

public class DatabaseCsvAccess
{
        private CsvReader DbReader() => new CsvReader(new StreamReader(DbCsvConstants.ConnectionString), CultureInfo.InvariantCulture);
        private CsvWriter DbWriter() => new CsvWriter(new StreamWriter(File.Open(DbCsvConstants.ConnectionString, FileMode.Append)), CultureInfo.InvariantCulture);

        public IEnumerable<MyModelRetrieved> GetItems()
        {
            using (var reader = DbReader())
            {
                reader.Configuration.HasHeaderRecord = false;
                return reader.GetRecords<MyModelRetrieved>().ToList();
            }
        }

        //INSERTS
        public void Insert<T>(T objectToInsert) where T : class, new()
        {
            using (var writer = DbWriter())
            {
                writer.NextRecord();
                writer.WriteRecord(objectToInsert);
            }
        }
        public void InsertItems<T>(IEnumerable<T> items) where T : class, new()
        {
            using (var writer = DbWriter())
            {
                writer.NextRecord();
                writer.WriteRecords(items);
            }
        }
    }
}