将 URI 放入 FileInputStream

Putting a URI into a FileInputStream

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

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

第二行显示 "Cannot resolve constructor 'File(android.net.Uri)'",所以我假设我必须将 URI 转换为不同的格式,但我不知道如何去做。任何帮助将不胜感激!

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

I'm assuming I must have to convert the URI to a different format

没有。 Uri 是某些内容的不透明句柄,例如

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

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

我是这样做的:

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