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