Android 从Uri读取文件会给出java.io.FileNotFoundException:打开失败:eNot
当使用Android 从Uri读取文件会给出java.io.FileNotFoundException:打开失败:eNot,android,image,uri,filenotfoundexception,Android,Image,Uri,Filenotfoundexception,当使用ACTION\u GET\u CONTENTintent拾取图像时,我会得到一个无法从中打开文件的URI。如果我尝试打开该文件,如下所示: InputStream in = new FileInputStream(new File(uri.getPath())); public void onActivityResult(int requestCode, int resultCode, Intent data) { .... Uri uri = data.getData(
ACTION\u GET\u CONTENT
intent拾取图像时,我会得到一个无法从中打开文件的URI。如果我尝试打开该文件,如下所示:
InputStream in = new FileInputStream(new File(uri.getPath()));
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
....
Uri uri = data.getData();
它给出了以下例外情况:
03-11 15:14:36.132 20557-20557/my.package W/System.err﹕ java.io.FileNotFoundException: /document/image:9537: open failed: ENOENT (No such file or directory)
03-11 15:14:36.138 20557-20557/my.package W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:456)
03-11 15:14:36.138 20557-20557/my.package W/System.err﹕ at java.io.FileInputStream.<init>(FileInputStream.java:76)
并在onActivityResult中检索Uri,如下所示:
InputStream in = new FileInputStream(new File(uri.getPath()));
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
....
Uri uri = data.getData();
我需要对文件进行解码,使其更小
如果我尝试打开该文件,如下所示:
InputStream in = new FileInputStream(new File(uri.getPath()));
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
....
Uri uri = data.getData();
这对大多数现代安卓设备都不起作用。您很可能收到了内容:
Uri
。这在较新版本的Android上相当正常。Android的未来版本可能会阻止文件:
Uri
值
我需要对文件进行解码,使其更小
不必存在与给定的Uri
关联的文件。Uri
可能指向:
- 外部存储器上的本地文件
- 另一个应用程序的内部存储上的本地文件
- 可移动存储上的本地文件
- 加密的本地文件,需要动态解密
- 数据库中
列中保存的字节流BLOB
- 需要先由其他应用程序下载的内容
- ……等等
使用
ContentResolver
和openInputStream()
在Uri
指向的内容上获取InputStream
。然后,将其传递给解码逻辑,例如BitmapFactory
及其decodeStream()
方法。这太棒了。我只是对这些uri的工作方式有一个误解。@wvdz:是的,最好将它们视为不透明句柄,类似于网站的URL。