Как импортировать файл из локального хранилища в БД во Flutter - PullRequest
0 голосов
/ 10 января 2019

Моя цель - открыть файл CSV из локального хранилища телефона ~ / Загрузки и импортировать его в БД.

Я использую Flutter, и по сей день я просмотрел более десятка примеров без успеха.

Однако мне удалось получить содержимое файла, напечатанного в консоли, но для этого мне нужно было иметь файл в папке assets / res в проекте приложения.

Если я использую getExternalStorageDirectory, в результате я получаю эмуляцию / storage / 0 /. Как получить доступ к внутреннему хранилищу устройства (не внешнему хранилищу, поскольку используемый телефон не будет иметь опцию для SD-карты или, если они будут, она не будет использоваться)?

Для БД я смог получить рабочий пример с использованием sqflite, но я, как и я, совершенно не могу работать в моем уже разработанном приложении.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Назад к началу, и все же немного ближе к решению, которое мне нужно. У меня есть file_picker (https://pub.dartlang.org/packages/file_picker),, который помогает выбрать файл с помощью проводника:

    String _filePath;

  void getFilePath() async {
    try {
      String filePath = await FilePicker.getFilePath(
          type: FileType.CUSTOM, fileExtension: 'csv');
      if (filePath == '') {
        return;
      }
      print("Path: " + filePath);
      setState(() {
        this._filePath = filePath;
      });
    } on PlatformException catch (e) {
      print("Error picking file: " + e.toString());
    }
  }

Использование приведенного выше кода возвращает путь к файлу, например, «/storage/emulated/0/Download/1.csv".

Теперь я использую этот путь, чтобы прочитать содержимое файла:

    ...
    RaisedButton(
                    child: const Text('Import data - dummy'),
                    color: Theme.of(context).accentColor,
                    elevation: 4.0,
                    splashColor: Colors.blueGrey,
                    onPressed: () {
                      print('Verifying click done');
                      // Show contents of the file
                      readContents();
                    },
                  ),
                ],
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: getFilePath,
              tooltip: 'Choose file to import',
              child: new Icon(Icons.sd_storage),
            )
    ...

Future<File> get _localFile async {
    final path = await _filePath;
    return File('$path');
  }

  Future<int> readContents() async {
    try {
      final file = await _localFile;

      // Read the file
      String contents = await file.readAsString();

      return int.parse(contents);
    } catch (e) {
      // If we encounter an error, return 0
      return 0;
    }
  }

Теперь, поскольку приведенный выше код должен возвращать содержимое файла CSV, он ничего не делает. CSV-файл содержит список элементов.

Может ли кто-нибудь сообщить мне, почему, и будьте любезны показать мне, как я могу сохранить проанализированный контент файла в строку или, что еще лучше, строки, представляющие каждый столбец из файла?

СПАСИБО!

0 голосов
/ 10 января 2019

Откройте файл как текстовый документ, используя open_file из пакета: open_file / open_file.dart, и проанализируйте содержимое самостоятельно.

См. https://pub.dartlang.org/documentation/open_file/latest/

...