【问题标题】:Putting a URI into a FileInputStream将 URI 放入 FileInputStream
【发布时间】:2017-03-19 23:03:38
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java android uri fileinputstream


    【解决方案1】:

    我是这样做的:

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

    【讨论】:

      【解决方案2】:

      我假设我必须将 URI 转换为不同的格式

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

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

      如果我对Uri 的来源的猜测是正确的,那么Uri 将具有file 方案或content 方案。您可以通过相同的方式在任一类型的Uri 上获得InputStream:在ContentResolver 上调用openInputStream()。您可以通过在Context 上调用getContentResolver() 来获得ContentResolver,例如您的ActivityService

      【讨论】:

      • 是的,解决了它。我不知道为什么我认为我需要 FileInputStreams 而不是 InputStreams。谢谢,伙计!
      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多