当前位置: 首页 > 知识库问答 >
问题:

从Uri中读取文件可以提供java。伊奥。FileNotFoundException:打开失败:eNot

海翔宇
2023-03-14

当使用ACTION_GET_CONTENT意图选择图像时,我会得到一个无法打开文件的URI。如果我尝试打开文件,如下所示:

InputStream in = new FileInputStream(new File(uri.getPath()));

它给出了以下例外情况:

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)

<代码>/文档/图像: 9537 似乎确实是一条不正确的路径,但是我如何获得正确的路径呢?

我用这个逻辑打开图像拾取器:

Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("return-data", false);
startActivityForResult(Intent.createChooser(photoPickerIntent, "Complete action using"), PICK_FROM_FILE);

然后在onActivityResult中检索Uri,如下所示:

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    ....
    Uri uri = data.getData();

我需要对文件进行解码,使其变小。

共有1个答案

李烨烁
2023-03-14

如果我尝试打开文件,像这样:

这对大多数现代Android设备都不起作用。最有可能的是,您收到了一个内容:Uri。这在较新版本的Android上相当正常。Android的未来版本可能会阻止file:Uri值。

我需要对文件进行解码,使其变小。

不必存在与给定的Uri关联的文件。Uri可能指向:

  • 外部存储上的本地文件
  • 其他应用程序的内部存储上的本地文件
  • 移动存储上的本地文件
  • 加密的本地文件,需要动态解密
  • 数据库中BLOB列中保存的字节流
  • 需要先被其他app下载的一条内容
  • ...等等

使用ContentResolveropenInputStream()Uri指向的内容上获取InputStream。然后,将其传递给解码逻辑,例如BitmapFactory及其decodeStream()方法。

 类似资料:
  • 我需要从我的图库中选择一张图片,然后放到我的baasbox服务器上。为此,我需要一个图像的输入流。 BaasBox Docs报告如下: 所以,我在网上搜索了怎么能做到这一点。 所以,当它开始时,我从gallery中选择一张图片并上传到b()start。。但它在运行时会返回以下错误代码(应用程序不会崩溃): D/log: Uri is:content://com.android.providers.

  • 我正试图为我的应用程序保存和编写一个包含一些数据的XML文件,但当它试图打开该文件时,它给出了一个java。伊奥。FileNotFoundException。 我用来保存XML文件的代码是: 我用来读取文件的代码是: 它给出的逻辑是: 有人知道如何解决这个问题吗?提前谢谢 编辑:整个写代码是:(抱歉,有些名字和注释是荷兰语) 整个读取代码是:

  • 出于某种原因,我在两次阅读中都获得了。值得注意的是Toast会打印“文件存在!”。我使用底部的来测试文件的内容是否正确。 Logcat...

  • 我正试图让jBehave在我的两个模块的谷歌应用引擎项目中模仿https://github.com/ctesniere/appengine-modules-sample-java.我使用Maven生成了jBehave原型()。我成功地运行了它。 然而,当我手动将更改应用到我的目标项目的pom.xml,并复制由jBehave原型生成的两个java文件时,我无法获得成功的。 我得到以下错误: 我找不到

  • 问题内容: 通过运行此… 我一直收到这个错误,我真的不知道该如何解决。该文件当前与.java文件位于我的源包中。通过指定路径,我可以很容易地读取文件,但是我打算在多台计算机上运行该文件,因此我需要文件可以随程序一起移植。这个问题不是关于读取文本文件,而是指定其位置而不使用绝对路径。香港专业教育学院寻找答案,但我得到的答案只是“指定名称”和“指定绝对路径”。ID张贴图像,使其更清晰,但我没有10代表