Связывание и копирование внешнего (съемного хранилища) файла в android

У меня есть открытый вопрос, который я хотел бы задать перед началом разработки функциональности, только чтобы узнать больше о предмете позже, просто чтобы начать все сначала ;) Я пытался искать, но не совсем уверен, что искать. Поэтому я хотел бы немного поковырять вас здесь...

Вот текущая ситуация: У меня есть приложение, в котором хранятся журналы действий/событий. В упрощенном примере: «Человек А наполнил стакан 100 мл воды».

Это хранится как запись в одной таблице.

Теперь о требованиях новой функциональности: я подключаю внешнее запоминающее устройство через USB к своему планшету. На этом запоминающем устройстве есть несколько текстовых файлов. Каждый файл содержит параметры действия/события, аналогичные описанному выше, но с другими данными.

Я хотел бы создать функцию для импорта этих файлов, считывания части их содержимого в базу данных в виде новых записей, а затем сохранения файла где-нибудь на планшете со ссылкой на файл в виде поля в БД. В идеале мне бы хотелось хранить содержимое всего текстового файла в поле или поле в связанной таблице 1:1, но эти файлы могут быть размером до 1 МБ (1 МБ будет очень редко, но возможно. Среднее значение равно около 100 КБ).

Итак, мои вопросы:

  • Возможно ли вообще скопировать файл с внешнего запоминающего устройства, подключенного через USB, на SD-карту/внутреннюю память устройства Android? (Я могу получить доступ к этому устройству хранения с помощью приложения для просмотра файлов на своем планшете)
  • Если да, то как лучше всего это сделать?
  • Если нет, то каковы мои альтернативы?
  • Кроме того, если невозможно скопировать и локально сохранить файлы, можно ли получить доступ к их содержимому во внешнем хранилище? В этом случае я просто импортирую нужные мне данные, а не сохраняю копию исходного файла.

Заранее спасибо, все ответы очень ценны!


person Wessel du Plooy    schedule 03.11.2012    source источник


Ответы (1)


Никто не хочет рискнуть? :)

Для будущих читателей с той же проблемой: можно прочитать файл с устройства, подключенного к USB. Имейте в виду, что чтение файла непосредственно из файловой системы отличается от чтения, например, в виде вложения в почте. Хотя не более чем другой путь ;)

В итоге я прочитал файл в БД, разделив строки по записи. Другими словами, не добавлять весь файл (или даже целую строку) в поле, а разбирать файл в одну запись, разбитую на разные поля.

Я наткнулся на две вещи, которые могут вам помочь. Чтение файла происходит довольно быстро, но не повторяйте мою ошибку, записывая эти строки в базу данных одну за другой. Лучше добавить их все в транзакцию и зафиксировать сразу. Во-вторых, вы можете использовать буфер чтения для чтения файла вместо потока ввода по умолчанию. Это также ускоряет чтение больших файлов.

person Wessel du Plooy    schedule 24.11.2012