Android如何访问我放在res文件夹中的原始资源?

时间:2010-05-18 10:40:43

标签: android java-me resources inputstream android-resources

在J2ME中,我这样做: getClass().getResourceAsStream("/raw_resources.dat");

但是在android中,我总是对此有效,为什么?

8 个答案:

答案 0 :(得分:118)

对于原始文件,您应该考虑在res目录中创建一个原始文件夹,然后从您的活动中调用getResources().openRawResource(resourceName)

答案 1 :(得分:25)

InputStream raw = context.getAssets().open("filename.ext");

Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8"));

答案 2 :(得分:13)

在某些情况下,如果生成了id

,我们必须使用图像名称从drawable或raw文件夹中获取图像
// 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);

答案 3 :(得分:4)

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

}

linearlayout中的TextView01 :: txtview res / raw文件夹中的hello :: .txt文件(你可以访问ny othr文件夹)

Ist 2行是2在onCreate()方法中写的

休息是在类扩展Activity !!中编写的。

答案 4 :(得分:4)

一种先进的方法是使用Kotlin Extension function

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

答案 5 :(得分:3)

  

InputStream in = getResources()。openRawResource(resourceName);

这将正常工作。在此之前,您必须在原始资源中创建xml文件/文本文件。然后就可以访问了。

修改
如果布局文件或图片名称中有任何错误,有时会导入com.andriod.R。因此,您必须正确导入包,然后才能访问原始文件。

答案 6 :(得分:3)

getClass().getResourcesAsStream()在Android上正常运行。只需确保您尝试打开的文件已正确嵌入APK(打开APK为ZIP)。

通常在Android上,您将此类文件放在assets目录中。因此,如果您将raw_resources.dat放在项目的assets子目录中,它将最终位于APK中的assets目录中,您可以使用:

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

也可以自定义构建过程,以使文件不会落在APK的assets目录中。

答案 7 :(得分:0)

这对我有用:getResources().openRawResource(R.raw.certificate)