Подтвердить что ты не робот

Как получить 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);
}

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

4b9b3361

Ответ 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();
 }