Как получить URI из файла активов?
Я пытаюсь получить путь 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);
}
Может кто-нибудь сказать мне, как я могу упомянуть абсолютный путь для файла, существующего в папке с ресурсами
Ответы
Ответ 1
Не существует "абсолютного пути к файлу, существующему в папке ресурсов". Содержимое assets/
папки вашего проекта упаковано в файл APK. Используйте объект AssetManager
чтобы получить InputStream
для актива.
Для WebView
вы можете использовать схему Uri
file
почти так же, как для URL. Синтаксис для ресурсов: file:///android_asset/...
(примечание: три слеша), где многоточие - это путь к файлу из папки assets/
.
Ответ 2
Правильный URL-адрес:
file:///android_asset/RELATIVEPATH
где RELATIVEPATH - это путь к вашему ресурсу относительно папки с ресурсами.
Обратите внимание на схему 3/. Веб-представление не загрузило бы какие-либо из моих активов без 3. Я пробовал 2 как (ранее) комментировал CommonsWare, и это не сработало. Затем я посмотрел источник CommonsWare на github и заметил дополнительную косую черту.
Это тестирование было сделано только на эмуляторе 1,6 Android, но я сомневаюсь, что он отличается от реального устройства или более высокой версии.
EDIT: CommonsWare обновил свой ответ, чтобы отразить это крошечное изменение. Поэтому я отредактировал это, поэтому он по-прежнему имеет смысл с его текущим ответом.
Ответ 3
![введите описание изображения здесь]()
Убедитесь, что папка ваших активов помещена в правильное положение.
Ответ 4
Работает для WebView, но, похоже, не работает на URL.openStream()
. Поэтому вам нужно различать файлы://протоколы и обрабатывать их с помощью AssetManager, как было предложено.
Ответ 5
Попробуйте этот код работать нормально
Uri imageUri = Uri.fromFile(new File("//android_asset/luc.jpeg"));
/* 2) Create a new Intent */
Intent imageEditorIntent = new AdobeImageIntent.Builder(this)
.setData(imageUri)
.build();
Ответ 6
InputStream is = getResources().getAssets().open("terms.txt");
String textfile = convertStreamToString(is);
public static String convertStreamToString(InputStream is)
throws IOException {
Writer writer = new StringWriter();
char[] buffer = new char[2048];
try {
Reader reader = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
String text = writer.toString();
return text;
Ответ 7
Попробуйте это: он работает
InputStream in_s = getClass().getClassLoader().getResourceAsStream("TopBrands.xml");
если у вас есть исключение с нулевым значением, попробуйте следующее:
InputStream in_s1 = TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml");
TopBranData - это класс
Ответ 8
попробуйте следующее:
Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.cat);
Я сделал это, и он работал
Ответ 9
Да, вы не можете получить доступ к своей папке с вашего телефона или эмулятора Android, потому что ваш компьютер и андроид - это две разные ОС. Я бы отправился в папку res android, потому что у него хорошие методы управления ресурсами. До тех пор, пока у вас нет веских оснований размещать файл в папке с ресурсами. Вместо этого вы можете сделать это
try {
Resources res = getResources();
InputStream in_s = res.openRawResource(R.raw.yourfile);
byte[] b = new byte[in_s.available()];
in_s.read(b);
String str = new String(b);
} catch (Exception e) {
Log.e(LOG_TAG, "File Reading Error", e);
}
Ответ 10
Наконец, я нашел способ получить путь к файлу, который присутствует в ресурсах, из этого ответа в Kotlin. Здесь мы копируем файл ресурсов в кэш и получаем путь к файлу из этого файла кэша.
@Throws(IOException::class)
fun getFileFromAssets(context: Context, fileName: String): File = File(context.cacheDir, fileName)
.also {
it.outputStream().use { cache -> context.assets.open(fileName).use { it.copyTo(cache) } }
}
Получить путь к файлу, как:
val filePath = getFileFromAssets(context, "fileName.extension").absolutePath
Ответ 11
который является правильным URL для IOS????
У меня "/var/mobile/Containers/Data/...", но я не могу прочитать файл
Ответ 12
Работал для меня Попробуйте этот код
uri = Uri.fromFile(new File("//assets/testdemo.txt"));
File f = new File(testfilepath);
if (f.exists() == true) {
Toast.makeText(getApplicationContext(),"valid :" + testfilepath, 2000).show();
} else {
Toast.makeText(getApplicationContext(),"invalid :" + testfilepath, 2000).show();
}