android - 从 /res/raw 文件夹中检索所有文件作为文件类型
Posted
技术标签:
【中文标题】android - 从 /res/raw 文件夹中检索所有文件作为文件类型【英文标题】:android - retrieve all files from /res/raw folder as File type 【发布时间】:2016-04-24 11:37:28 【问题描述】:如何将 /res/raw 文件夹中的所有文件作为文件检索? 我找到了this 解决方案,并且我已将“新文件夹”值替换为“res/raw”,如以下代码所示:
public File[] getRawFiles()
File sdCardRoot = Environment.getExternalStorageDirectory();
File yourDir = new File(sdCardRoot, "res/raw");
return yourDir.listFiles();
程序启动时,return yourDir.listFiles
行出现异常:
Caused by: java.lang.NullPointerException: Attempt to get length of null array
我该如何解决这个问题,“res/raw/”的正确路径是什么?
【问题讨论】:
【参考方案1】:如何将 /res/raw 文件夹中的所有文件作为文件检索?
你不能这样做。正如we discussed yesterday,资源不是设备文件系统上的文件。它们是您的开发机器上的文件。它们只是设备上 APK 文件中的条目。
要么:
做任何你想做的不涉及文件的其他方式,或者
在Resources
对象上使用openInputStream()
(您可以通过getResources()
从任何Context
中获取一个),并使用Java I/O 将资源的内容复制到本地文件,比如在internal storage和using reflection to iterate over the actual resources上,或者
切换到使用assets/
而不是res/raw/
,因为AssetManager
允许您使用list()
资产(尽管您仍然只能在资产上获得InputStream
,就像资源一样,资产不是设备上的文件)
【讨论】:
好的,就是这样。但是(以下问题可能是题外话),但主要问题,或者我想要实现的,是我需要为new MediaMetadataRetriever().setDataSource()
设置路径,以便收集有关该 mp3 文件的一些数据。如何获取该路径并将该值设置为 setDataSource(path)
?
@Kapparino:MediaMetadataRetriever
上有六个版本的setDataSource()
,采用不同的参数。如果没有别的,请使用带有 MediaDataSource
的那个,然后实现一个 MediaDataSource
来包装您想要的资源或资产。此外,对于Resources
或AssetManager
上返回AssetFileDescriptor
的任何方法,您可以调用getFileDescriptor()
以获取FileDescriptor
以传递给setDataSource()
。
您好,很抱歉打扰了,请您查看以下图片:http://i.imgur.com/9VQ6UdE.png
我在图片中看到的数据为空,尽管实际上是为文件设置了值。跨度>
@Kapparino:我不知道,抱歉。以上是关于android - 从 /res/raw 文件夹中检索所有文件作为文件类型的主要内容,如果未能解决你的问题,请参考以下文章
Android 意图让视频播放器在 res/raw 文件中播放视频
Flutter - 播放来自平台特定文件夹的声音文件(例如 Android 的 android/app/src/main/res/raw)