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

Ark*_*aha 52 resources android inputstream java-me android-resources

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

但是在android中,我总是在这上面为空,为什么?

Sam*_*muh 124

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


小智 25

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

Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8"));
Run Code Online (Sandbox Code Playgroud)

  • 请参阅Samuh的回答(如下),它更准确. (19认同)
  • 他没有询问资产/他询问res/raw / (8认同)
  • 这不是Android中的方法.检查Samuh的回答. (2认同)
  • 他说res文件夹,不是资产文件夹. (2认同)

小智 14

在某些情况下,如果生成了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);
Run Code Online (Sandbox Code Playgroud)

  • 这一行:int i = mContext.getResources().getIdentifier("ic_launcher","raw",mContext.getPackageName()); 是黄金 (6认同)

yoA*_*ex5 6

一种先进的方法是使用Kotlin 扩展功能

fun Context.getRawInput(@RawRes resourceId: Int): InputStream {
    return resources.openRawResource(resourceId)
}
Run Code Online (Sandbox Code Playgroud)

另一有趣的事情是在Closeable范围内定义的扩展功能使用

例如,您可以以优雅的方式使用输入流,而无需处理异常和内存管理

fun Context.readRaw(@RawRes resourceId: Int): String {
    return resources.openRawResource(resourceId).bufferedReader(Charsets.UTF_8).use { it.readText() }
}
Run Code Online (Sandbox Code Playgroud)


poo*_*118 5

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

}
Run Code Online (Sandbox Code Playgroud)

在res / raw文件夹中的TextView01 :: txtview在hello ::。txt文件中(您可以通过wel访问ny othr文件夹)

第2行是用onCreate()方法编写的2行

剩下的要写在扩展Activity的课堂上!


0xF*_*0xF 5

getClass().getResourcesAsStream()在 Android 上运行良好。只需确保您尝试打开的文件正确嵌入到您的 APK 中(以 ZIP 格式打开 APK)。

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

getClass().getResourcesAsStream("/assets/raw_resources.dat");
Run Code Online (Sandbox Code Playgroud)

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

  • 哎呀,不错。甚至不需要上下文。 (2认同)
  • 应该注意的是,“assets”文件夹位于“src/main/assets”。 (2认同)