在android中读取资源作为InputStream

时间:2014-07-24 11:47:49

标签: java android android-studio

我有一些android项目,我试图从“res / drawable-xhdpi”目录中读取一些文件,所以我把

InputStream is = null;

        try {
            is = getResources().openRawResource(R.drawable.my_btn); //my_btn is inside drawable-xhdpi directory
        } catch (Exception e) {
            e.printStackTrace();
        }

但我得到

error opening trace file: No such file or directory 

我该如何处理这个问题。我试图用绝对路径直接从FileInputStream读取这个,然后我意识到提取文件的根是JVM的根,所以我仍然有相同的No such file or directory错误消息

更新:

我在assets侧添加了src/main目录,然后我将my_btn.png放入其中,然后在我的MainActivity类中调用

InputStream is = null;

        try {

            is = getAssets().open("my_btn.png");

        } catch (Exception e) {
            e.printStackTrace();
        }

但我仍然得到同样的错误

3 个答案:

答案 0 :(得分:2)

只有在"res/drawable-xhdpi"设备上运行应用时,才会从xhdpi获取drawable。否则它将尝试根据屏幕从相应的可绘制文件夹中获取drawable,如果不存在,您将得到与上面相同的错误。如果您不确定使用哪种屏幕尺寸,最好的办法是在res文件夹中创建一个名为"drawable"的目录(即"res/drawable"),然后将my_btn添加到新的创建了"drawable"文件夹。然后,无论屏幕大小如何,它都将从新文件夹中获取图像。

修改

您正在使用原始文件夹,而不是资源文件夹。 openRawResource从原始文件夹中读取。使用以下代码获取drawable并将其转换为输入流(您必须使用try-catch包围)。

Drawable drawable = getResources().getDrawable(R.drawable.my_btn);
BitmapDrawable bitmapDrawable = ((BitmapDrawable) drawable);
Bitmap bitmap = bitmapDrawable.getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, stream); //use the compression format of your need
InputStream is = new ByteArrayInputStream(stream.toByteArray());

答案 1 :(得分:2)

_pm.iconStream = getResources()。openRawResource(+ R.drawable.pdf_icon);

答案 2 :(得分:1)

  

我只是想测试一下,然后拍照并将其发送给Parse

将测试图片放在res/raw/(然后,使用现有代码,R.raw.whatever_you_call_the_image)或assets/中(或使用getAssets().open()相对路径)的某个位置在assets/到您的图片内。)