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

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

但在Android中,我总是得到null,为什么呢?

 InputStream raw = context.getAssets().open("filename.ext"); Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8")); 

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

在某些情况下,如果生成了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); 
 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(); } 

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

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

rest是写在课上延伸活动!

getClass().getResourcesAsStream()在Android上正常工作。 只要确保您尝试打开的文件已正确embedded您的APK(以ZIP格式打开APK)。

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

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

还可以自定义构build过程,以便文件不会归入APK中的assets目录。

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

这将正常工作。 在此之前,您必须在原始资源中创buildxml文件/文本文件。 那么它将被访问。

编辑
有时,如果布局文件或图像名称中有任何错误,则会导入com.andriod.R。 所以你必须正确导入包,那么只有原始文件将被访问。

先进的方法是使用扩展function

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

另一个有趣的事情是在Closeable scope中定义的扩展函数的使用

例如,您可以使用inputstream以优雅的方式处理exception和内存pipe理

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