将URI放入FileInputStream

时间:2017-03-19 23:03:39

标签: java android uri fileinputstream

对于作业,我们需要能够保存自定义文件类型,然后才能再次读取它。我想我可以使用FileInputStream类,这样我就可以轻松地使用myInStream.read()从文件中获取所需的所有信息。但是,我遇到了将文件放入FileInputStream的问题。我能够获取URI,但似乎我用来获取URI的方法使得URI类型与File类不兼容。在我开始阅读之前,我在onActivityResult()中有以下代码:

    Uri pickedFile = data.getData();
    File myFile = new File(pickedFile);
    FileInputStream inStream = new FileInputStream(myFile);

在第二行它说“无法解析构造函数'文件(android.net.Uri)'”,所以我假设我必须将URI转换为不同的格式,但我不知道该如何去关于它。任何帮助将不胜感激!

编辑: 为了将来参考,固定代码如下所示:         Uri pickedFile = data.getData();         InputStream inStream = getContentResolver()。openInputStream(pickedFile);

2 个答案:

答案 0 :(得分:0)

  

我假设我必须将URI转换为其他格式

没有。 Uri是某些内容的不透明句柄,例如https://stackoverflow.com/questions/42893406/putting-a-uri-into-a-fileinputstream。它不是文件。

您没有显示Uri的来源。我猜测,鉴于名为pickedFile,您使用的是ACTION_GET_CONTENTACTION_OPEN_DOCUMENT。在这两种情况下,用户都不会选择文件。

如果我对Uri来自何处的猜测是正确的,则Uri将采用file方案或content方案。您可以同样的方式获得InputStream这两种类型的Uri:在openInputStream()上致电ContentResolver。您可以通过ContentResolver调用getContentResolver()来获得Context,例如ActivityService

答案 1 :(得分:0)

我这样做是这样的:

FileInputStream importdb = new FileInputStream(_context.getContentResolver().openFileDescriptor(uri, "r").getFileDescriptor());