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 来包装您想要的资源或资产。此外,对于ResourcesAssetManager 上返回AssetFileDescriptor 的任何方法,您可以调用getFileDescriptor() 以获取FileDescriptor 以传递给setDataSource() 您好,很抱歉打扰了,请您查看以下图片:http://i.imgur.com/9VQ6UdE.png 我在图片中看到的数据为空,尽管实际上是为文件设置了值。跨度> @Kapparino:我不知道,抱歉。

以上是关于android - 从 /res/raw 文件夹中检索所有文件作为文件类型的主要内容,如果未能解决你的问题,请参考以下文章

Android 意图让视频播放器在 res/raw 文件中播放视频

Android复制res/raw目录的文件到SD卡下

Android复制res/raw目录的文件到SD卡下

Flutter - 播放来自平台特定文件夹的声音文件(例如 Android 的 android/app/src/main/res/raw)

android 打开 res raw目录 中 数据库文件

Android中asset文件夹和raw文件夹