将 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_CONTENT
或 ACTION_OPEN_DOCUMENT
。在这两种情况下,用户都不会选择文件。
如果我对 Uri
来源的猜测是正确的,那么 Uri
将有一个 file
方案或一个 content
方案。您可以通过相同的方式在任一类型的 Uri
上获得 InputStream
:在 ContentResolver
上调用 openInputStream()
。您通过在 Context
上调用 getContentResolver()
获得 ContentResolver
,例如您的 Activity
或 Service
.
我是这样做的:
FileInputStream importdb = new FileInputStream(_context.getContentResolver().openFileDescriptor(uri, "r").getFileDescriptor());
对于作业,我们需要能够保存自定义文件类型,然后能够再次读回。我想我可以使用 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_CONTENT
或 ACTION_OPEN_DOCUMENT
。在这两种情况下,用户都不会选择文件。Uri
来源的猜测是正确的,那么 Uri
将有一个 file
方案或一个 content
方案。您可以通过相同的方式在任一类型的 Uri
上获得 InputStream
:在 ContentResolver
上调用 openInputStream()
。您通过在 Context
上调用 getContentResolver()
获得 ContentResolver
,例如您的 Activity
或 Service
.
我是这样做的:
FileInputStream importdb = new FileInputStream(_context.getContentResolver().openFileDescriptor(uri, "r").getFileDescriptor());