Как открыть файл, используя его абсолютный путь?

#flutter #dart

Вопрос:

Как открыть файл, используя его абсолютный путь?

 await File('c:/Users/rozerro/AndroidStudioProjects/rxdart_streams/assets/sonet.txt')
            .openRead()
            .transform(utf8.decoder)
            .transform(LineSplitter())
            .toList();
 

так же как

 c:\Users\rozerro\AndroidStudioProjects\rxdart_streams\assets\sonet.txt
 

Ошибка

E/flutter ( 4943): [ОШИБКА:flutter/lib/ui/ui_dart_state.cc(177)] Необработанное исключение: Исключение файловой системы: Не удается открыть файл, путь = ‘c:/Users/rozerro/AndroidStudioProjects/rxdart_streams/assets/sonet.txt’ (Ошибка ОС: Такого файла или каталога нет, errno = 2)

Комментарии:

1. Можете ли вы вставить свой путь в окно проводника, и файл откроется? Откуда вы знаете, что путь правильный? Кроме того, вы пометили этот дротик. Это чистый дротик в Windows или, может быть, трепет на эмулируемом устройстве?

2. @nvoigt это флаттер. этот путь является правильным в Windows C:UsersrozerroAndroidStudioProjectsrxdart_streamsassetssonet.txt

3. Итак… это Флаттер на устройстве или Флаттер для рабочего стола Windows?

Ответ №1:

Вы не можете этого сделать. Вы не можете получить доступ к файлу на локальном компьютере из приложения, развернутого на вашем смартфоне.

Поскольку ваш текстовый файл находится в папке с именем assets, я предполагаю, что это какой-то файл, который вы хотите развернуть вместе с вашим приложением. В flutter это называется «активом», и вы можете прочитать о том, как этого добиться, в документации об активах и изображениях.

Короче говоря, в вашем файле pubspec.yaml должна быть запись для него:

 flutter:
  assets:
    - assets/sonet.txt
 

И затем вы можете получить доступ к нему в своем источнике с помощью этого метода:

 final textFromFile = await rootBundle.loadString('assets/sonet.txt');
 

Комментарии:

1. на самом деле приложение работает на эмуляторе

2. Что ж, если эмулятор хоть сколько-нибудь хорош, он будет имитировать тот факт, что смартфон не может этого сделать.