2011-01-27 3 views
86

Я пытаюсь получить путь 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); 
} 

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

ответ

118

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

EDIT

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

+0

Причина, почему я хотел абсолютный путь, что я хотел URI для файла. – Titus

+23

'file: // android_asset/...', где '...' - относительный путь в каталоге 'assets /' вашего проекта. – CommonsWare

+0

Я пробовал это, и я получаю его как недопустимый путь. Я проверил, что apk содержит txt-файл в своей папке с активами – Titus

6

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

58

Правильный URL является:

file:///android_asset/RELATIVEPATH 

где RELATIVEPATH путь к вашему ресурсу по отношению к папке активов.

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

Это тестирование было выполнено только на эмуляторе 1,6 Android, но я сомневаюсь, что он отличается от реального устройства или более высокой версии.

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

2
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; 
-2

попробовать это:

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

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

+2

На самом деле это работает. Проверьте [ContentResolver.openAssetFileDescriptor] (https://developer.android.com/reference/android/content/ContentResolver.html#openAssetFileDescriptor (android.net.Uri% 2C% 20java.lang.String)) –

4

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

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

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

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

TopBranData представляет собой класс

+0

Если вы не работаете, пожалуйста Попробуйте следующее: InputStream in_s1 = TopBrandData.class.getResourceAsStream ("/ assets/TopBrands.xml"); –

0

Да, вы не можете получить доступ к папке диска от вас телефона андроида или эмулятора, потому что ваш компьютер и андроид два разных OS.I бы для папки Реза из андроида, поскольку он имеет хорошие управления ресурсами методы. До тех пор, пока у вас нет веских оснований размещать файл в папке с ресурсами.Вместо этого Вы можете сделать это

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

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

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

enter image description here

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

3

Пожалуйста, попробуйте этот код работает отлично

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^