我想从Flutter中的CSV文件将数据导入Firebase数据库。因此,我使用文件选择器从设备中选择了.CSV文件。现在如何从该文件读取数据?
答案 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);
}
}
}
}