Я пытался получить путь URI для файла актива.
uri = Uri.fromFile(new File("//assets/mydemo.txt"));
Когда я проверяю, существует ли файл, я вижу, что файл не существует
File f = new File(filepath);
if (f.exists() == true) {
Log.e(TAG, "Valid :" + filepath);
} else {
Log.e(TAG, "InValid :" + filepath);
}
Может ли кто-нибудь сказать мне, как я могу указать абсолютный путь к файлу, существующему в папке с ресурсами?
file://android_asset/...
, где...
- относительный путь в каталоге вашего проектаassets/
.file://android_asset/
, но не дляUri
: github.com/commonsguy/cw-advandroid/tree/master/WebView/GeoWeb1file:///
.new File("file:///android_asset/sounds/beep.mid");
, но файл результатов не существует. Любые идеи? Файл PS находится вassets/sounds/
папке.Правильный URL-адрес:
где RELATIVEPATH - это путь к вашему ресурсу относительно папки с ресурсами.
Обратите внимание на 3 / на схеме. Веб-представление не загрузило бы ни один из моих ресурсов без 3. Я попробовал 2, как (ранее) прокомментировал CommonsWare, и это не сработало. Затем я посмотрел на исходный код CommonsWare на github и заметил лишнюю косую черту.
Это тестирование проводилось только на эмуляторе Android 1.6, но я сомневаюсь, что на реальном устройстве или более поздней версии оно будет отличаться.
РЕДАКТИРОВАТЬ: CommonsWare обновил свой ответ, чтобы отразить это крошечное изменение. Итак, я отредактировал это, так что он все еще имеет смысл с его текущим ответом.
источник
String fileName = "file:///android_asset/file.csv";
System.out.println(new File(fileName).exists()); // prints false
File
, принимающий строку, ожидает путь, а не URI . Я не программировал для Android несколько лет, и все могло измениться. Я не уверен, что вы можете получить доступ к папке встроенных ресурсов с помощью обычного класса Java File. Кажется, я помню, что вам нужно использовать AssetManager . Файлы в папке с ресурсами размещаются на устройстве в пакете APK, доступном только для чтения, и сжимаются (APK на самом деле представляют собой zip-файлы), поэтому требуется больше работы, чтобы прочитать их обратно. Попробуйте что-нибудь вродеnew File(new URI(filename))
Пожалуйста, попробуйте этот код работать нормально
источник
Наконец, я нашел способ получить путь к файлу, который присутствует в активах, из этого ответа в Kotlin. Здесь мы копируем файл ресурсов в кеш и получаем путь к файлу из этого файла кеша.
Получите путь к файлу, например:
источник
fileName
есть каталогdir/file
. Произойдет сбой, если путьcache/dir/file
не существует. Кроме того, я думаю , что лучше иметь проверкуif(!it.exist)
внутриalso
блока, то он не будет копировать файл каждый раз , даже файл уже находится на кэшif(!it.exist)
показывает ссылку на неразрешенную ошибку. любое решение?if(!it.exist)
стоит поставить передit.outputStream()
...Убедитесь, что ваша папка с активами находится в правильном положении.
источник
sourceSets { main { assets.srcDirs = ['src/main/assets'] } }
Работает для WebView, но, похоже, не работает
URL.openStream()
. Поэтому вам нужно различать протоколы file: // и обрабатывать их через AssetManager, как предлагается.источник
Попробуйте, это работает:
Если вы получили исключение нулевого значения, попробуйте это (с классом
TopBrandData
):источник
источник
попробуй это :
Я сделал это, и это сработало
источник
Да, вы не можете получить доступ к папке диска с вашего телефона Android или эмулятора, потому что ваш компьютер и Android - это две разные ОС. Я бы выбрал папку res для Android, потому что у нее хорошие методы управления ресурсами. До тех пор, пока у вас нет веской причины поместить файл в папку с ресурсами. Вместо этого вы можете сделать это
источник
Работал для меня Попробуйте этот код
источник