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

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

10 96

10 ответов:

нет "абсолютного пути для файла, существующего в папке активов". Содержание вашего проекта assets/ папки упакованы в файл APK. ИспользуйтеAssetManager объект, чтобы получить InputStream на актив.

EDIT

чтобы исправить один из моих комментариев ниже, синтаксис URL для активов file:///android_asset/... (Примечание: три косые черты).

правильным URL-адресом является:

file:///android_asset/RELATIVEPATH

где RELATIVEPATH-это путь к ресурсу относительно папки assets.

Примечание 3 /s в схеме. Веб-представление не будет загружать ни один из моих активов без 3. Я попробовал 2 Как (ранее) прокомментировал CommonsWare, и это не сработает. Затем я посмотрел на источник CommonsWare на github и заметил дополнительную косую черту.

это тестирование, хотя было сделано только на эмуляторе 1.6 Android, но я сомневаюсь, что он отличается на реальном устройстве или более высокой версии.

EDIT: CommonsWare обновил свой ответ, чтобы отразить это крошечное изменение. Так что я редактировал, так что это все еще имеет смысл его ответа.

enter image description here

убедитесь, что ваша папка активов находится в правильном положении.

работает для WebView, но, похоже, не работает на URL.openStream(). Поэтому вам нужно различать протоколы file: / / и обрабатывать их через AssetManager, как это предлагается.

пожалуйста, попробуйте этот код работает нормально

 Uri imageUri = Uri.fromFile(new File("//android_asset/luc.jpeg"));

    /* 2) Create a new Intent */
    Intent imageEditorIntent = new AdobeImageIntent.Builder(this)
            .setData(imageUri)
            .build();

попробуйте это : это работает

InputStream in_s = getClass().getClassLoader().getResourceAsStream("TopBrands.xml");

Если у вас есть исключение нулевого значения, попробуйте это:

InputStream in_s1 =   TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml");

TopBranData-это класс

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;

Да, вы не можете получить доступ к папке диска с вашего телефона или эмулятора android, потому что ваш компьютер и 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);
 }

попробуйте это :

Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.cat); 

Я сделал это и он работал

работал для меня попробуйте этот код

   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();
 }