Java 在android中以InputStream的形式读取资源
我有一些android项目,我正在尝试从“res/drawable xhdpi”目录中读取一些文件,所以我把Java 在android中以InputStream的形式读取资源,java,android,android-studio,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
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
的根,因此我仍然得到相同的没有这样的文件或目录
错误消息
更新:
我在sidesrc/main
中添加了一个assets
目录,然后我将my_btn.png
放入其中,然后在MainActivity
类中调用
InputStream is = null;
try {
is = getAssets().open("my_btn.png");
} catch (Exception e) {
e.printStackTrace();
}
但我仍然收到相同的错误只有在
xhdpi
设备上运行应用程序时,才会从“res/drawable xhdpi”
获取可绘制文件。否则,它将根据屏幕从相应的drawable文件夹中获取drawable,如果它不在那里,您将得到与上面相同的错误。如果您不确定使用的屏幕大小,最好的解决方法是在res文件夹(即,“res/drawable”
)中创建一个名为“drawable”
)的目录,然后将我的btn
添加到新创建的“drawable”
文件夹中。然后,无论屏幕大小如何,它都将从新文件夹中获取图像
编辑
您使用的是原始文件夹,而不是资源文件夹openRawResource
从原始文件夹读取数据。使用下面的代码获得一个可绘制文件,并将其转换为输入流(您将不得不使用try-catch进行包围)
我只是想测试一下,我拍了一张照片并把它发送给Parse
将测试映像放在
res/raw/
中的某个位置(然后,使用现有的代码,使用R.raw。无论您称之为什么,_映像
)或assets/
(然后,使用getAssets().open()
,在assets/
中使用与映像相关的路径)。\p>\u pm.iconStream=getResources().openrawsource>(+R.drawable.pdf_icon);您想用这种方法解决什么问题?这不是您使用可绘制资源的方式。openRawResource()
用于原始资源,而不是可绘制资源。我只是尝试测试,然后拍摄一张照片并将其发送到Parse
,这比它应该的要复杂,可能是因为这样做的基本方法是错误的。因此,作为建议,请编辑您的问题,告诉我们您想要实现的目标,以便我们可以找到更合适的答案。我照你说的做了,我在一个可绘图文件夹中添加了一些图片,但仍然收到相同的消息!!等等。在阅读了你问题下的评论后,我注意到你犯了严重错误。我将编辑我的答案。更新。请检查并告诉我是否有帮助。:)这对于用例来说是相当内存密集的。刚才回答了他的问题。他的问题是关于获取一个可绘制的输入流。我尝试将assets/
目录添加到res
文件夹中,然后将getAssets()放入。打开(“我的btn”)
,我仍然得到了相同的结果message@user1611830:您忘记了文件扩展名。对于资产,您使用扩展名为的完整文件名。对不起,我的意思是我使用了正确的扩展名。顺便说一下,当我放置Log.d(“TAG”)时,Arrays.toString(getAssets().list(“.”))代码>我得到一个空的array@user1611830:由于您没有名为
的文件,这并不奇怪。这不是一个目录;它是ZIP样式存档(APK)中的条目。@user1611830它不属于res文件夹,您必须将其添加到assets目录中。首先,您需要在src>main中添加它(因为您使用的是android studio)。第二,别忘了分机。
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());