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