FileNotFoundException尽管在android中使用了绝对的Uri

时间:2014-05-22 13:34:12

标签: java android file filenotfoundexception

我正在尝试使用javamail通过电子邮件发送图片。但我得到一个FileNotFoundException:

05-22 15:05:29.300: W/System.err(29154): javax.mail.MessagingException: IOException while sending message;
05-22 15:05:29.300: W/System.err(29154):   nested exception is:
05-22 15:05:29.300: W/System.err(29154):    java.io.FileNotFoundException: /content:/media/external/images/media/35367: open failed: ENOENT (No such file or directory)

我认为这是导致异常的方法的一部分:

        System.out.println(params[1]);
        File filename=new File(params[1]); // params[1]=content://media/external/images/media/35367
        DataSource source = new FileDataSource(filename);//uses aditional
        messageBodyPart.setDataHandler(new DataHandler(source));

但是,如果我理解API正确,绝对uri不是File对象的问题。 而且我认为该文件不存在是可能的,因为在此方法之前我通过此uri设置了ImageView。这可能是问题吗?像那个android会自动锁定这个文件吗?

我还在AndroidManifest上设置了读写权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

如果您需要更多信息,请发表评论。

编辑: 我查找了我想要发送的图像的路径,它与保存它的路径完全不同......

3 个答案:

答案 0 :(得分:2)

  

我正在尝试使用javamail通过电子邮件发送图片。但我得到一个FileNotFoundException

那是因为你拥有的不是文件。它是ContentProvider中的条目。

使用InputStream上的openInputStream()获取内容ContentResolver。然后,将其与ByteArrayDataSource而不是FileDataSource一起使用。从理论上讲,这应该有效,至少应该让你更接近有效的东西。

答案 1 :(得分:0)

/content:/media/external/images/media/35367

在您的设备上无效路径。如果你想要绝对路径,你应该

/media/external/images/media/35367

答案 2 :(得分:0)

你有没有把图像的扩展名留在uri之外?

例如, JPG图片/content:/media/external/images/media/35367.jpg