Android 为什么打开文件失败?此行发生错误

Android 为什么打开文件失败?此行发生错误,android,file,Android,File,错误:E/FileSource:无法打开文件“android.resource:/com.android.grafika/2130968577”。(无此类文件或目录) 如何修复它?根本原因是什么?我是说这段代码有什么问题 我是说这段代码有什么问题 首先,将Uri的字符串表示形式传递给文件构造函数将永远无法工作。Uri有一个方案;文件构造函数将不知道如何处理该方案 其次,android.resource方案是针对android资源的。虽然资源是开发者机器上的文件,但它们不是Android设备上的文

错误:E/FileSource:无法打开文件“android.resource:/com.android.grafika/2130968577”。(无此类文件或目录)

如何修复它?根本原因是什么?我是说这段代码有什么问题

我是说这段代码有什么问题

首先,将
Uri的字符串表示形式
传递给
文件
构造函数将永远无法工作。
Uri
有一个方案;
文件
构造函数将不知道如何处理该方案

其次,
android.resource
方案是针对android资源的。虽然资源是开发者机器上的文件,但它们不是Android设备上的文件,不能用
文件
对象表示

如何修复它

不要试图通过
文件
对象访问资源


例如,在给定资源ID的情况下,您可以在
资源
对象上获取原始资源上的
InputStream

问题是您构建的文件路径不存在

要打开原始资源,请使用。例如:

InputStream stream = getContext().getResources().openRawResource( R.raw.b_right );

最后一个字符串uriPath=“android.resource://”+getPackageName()+“/raw/texivedio”

但File有一个带有File(URI)的构造函数。那么@commonware是如何工作的呢?@Bee:那是
java.net.URI
,而不是
android.net.URI
。我不知道
文件
将期望从
文件(字符串)
构造函数中删除一个方案。此外,正如我在回答中指出的,资源无论如何都不是一个文件。因此,即使
File(String)
确实看到一个方案,将其删除,并尝试将其余部分用作文件系统路径,该代码也会失败,因为没有文件,更不用说在该位置了。有什么方法可以将其作为文件使用吗?可能不是我怎么尝试的,而是以任何其他方式将其归档@CommonsWare@Bee:您必须将从原始资源获得的
InputStream
中的数据复制到指向某个文件的
OutputStream
,然后使用该文件。但是该文件有一个带file(URI)的构造函数。那么它是如何工作的@dsh?a)你没有调用构造函数;您调用了vidUri.toString(),从而调用了文件(字符串路径)。b) 阅读文档:
uri需要是一个绝对的、分层的统一资源标识符,具有文件方案和非空路径组件,但具有未定义的权限、查询或片段组件。
uri不满足这些要求。使用
openRawResources()
打开原始资源。vidUri.getpath()也可以这样做。有没有什么方法可以把uri构造成文件?可能来自任何其他位置。我有一个mp4,我想要它作为文件。这对我有帮助@谢谢你。我不能接受两个答案,尽管它们都是正确的。所以,作为第一个,我接受了另一个答案,并放弃了你的答案,因为它们基本上是一样的@dshYes,我们俩同时给出了相同的建议。请注意:提供URI的路径组件(您自己计算的文本),但不会使文件存在于本地文件系统中。这就是为什么它对你也不起作用。
InputStream stream = getContext().getResources().openRawResource( R.raw.b_right );