Android, как получить доступ к необработанным ресурсам, которые я положил в папку res? - PullRequest
51 голосов
/ 18 мая 2010

В J2ME я делаю так: getClass().getResourceAsStream("/raw_resources.dat");

Но в андроиде я всегда обнуляюсь, почему?

Ответы [ 7 ]

119 голосов
/ 18 мая 2010

Для необработанных файлов вам следует рассмотреть возможность создания необработанной папки внутри директории res, а затем вызвать getResources().openRawResource(resourceName) из вашей деятельности.

25 голосов
/ 18 мая 2010
InputStream raw = context.getAssets().open("filename.ext");

Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8"));
13 голосов
/ 05 июня 2012

В некоторых ситуациях мы должны получить изображение из нарисованной или необработанной папки, используя вместо этого имя изображения, если генерируется id

// Image View Object 
        mIv = (ImageView) findViewById(R.id.xidIma);
// create context Object for  to Fetch  image from resourse 
Context mContext=getApplicationContext();

// getResources().getIdentifier("image_name","res_folder_name", package_name);

// find out below example 
    int i = mContext.getResources().getIdentifier("ic_launcher","raw", mContext.getPackageName());

// now we will get contsant id for that image       
        mIv.setBackgroundResource(i);
5 голосов
/ 10 ноября 2017

Расширенный подход использует Kotlin Функция расширения

fun Context.getRawInput(@RawRes resourceId: Int): InputStream {
    return resources.openRawResource(resourceId)
}

Еще одна интересная вещь - это функция расширения использование , которая определена в закрываемой области действия

Например, вы можете элегантно работать с потоком ввода без обработки исключений и управления памятью

fun Context.readRaw(@RawRes resourceId: Int): String {
    return resources.openRawResource(resourceId).bufferedReader(Charsets.UTF_8).use { it.readText() }
}
4 голосов
/ 02 июля 2010
TextView txtvw = (TextView)findViewById(R.id.TextView01);
        txtvw.setText(readTxt());

 private String readTxt()
    {
    InputStream raw = getResources().openRawResource(R.raw.hello);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i;
    try
    {
        i = raw.read();
        while (i != -1)
        {
            byteArrayOutputStream.write(i);
            i = raw.read();
        }
        raw.close();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block

        e.printStackTrace();
    }


    return byteArrayOutputStream.toString();

}

TextView01 :: txtview in linearlayout файл hello :: .txt в папке res / raw (вы также можете получить доступ к папке ny othr)

Ist 2 строки 2 написаны в методе onCreate ()

Остальное должно быть написано в классе, расширяющем Activity !!

3 голосов
/ 05 февраля 2014

getClass().getResourcesAsStream() отлично работает на Android. Просто убедитесь, что файл, который вы пытаетесь открыть, правильно встроен в ваш APK (откройте APK как ZIP).

Обычно на Android вы помещаете такие файлы в каталог assets. Поэтому, если вы поместите raw_resources.dat в подкаталог assets вашего проекта, он окажется в каталоге assets в APK и вы можете использовать:

getClass().getResourcesAsStream("/assets/raw_resources.dat");

Также можно настроить процесс сборки так, чтобы файл не попадал в каталог assets в APK.

3 голосов
/ 21 февраля 2013

InputStream in = getResources (). OpenRawResource (resourceName);

Это будет работать правильно. Перед этим вы должны создать файл XML / текстовый файл в сыром ресурсе. Тогда это будет доступно.

Редактировать
Иногда com.andriod.R иногда импортируется, если в именах файлов макетов или изображений есть ошибки Поэтому вы должны правильно импортировать пакет, тогда будет доступен только необработанный файл.

...