Как получить 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 ответов:
нет "абсолютного пути для файла, существующего в папке активов". Содержание вашего проекта
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 обновил свой ответ, чтобы отразить это крошечное изменение. Так что я редактировал, так что это все еще имеет смысл его ответа.
работает для 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(); }