31

我需要 res/raw/ 中所有文件的名称(字符串)

我试过:

File f = new File("/"); 
String[] someFiles = f.list();

看起来根目录是android模拟器的根......而不是我的电脑根目录。这很有意义,但并不能真正帮助我找出原始文件夹的存在位置。

更新:感谢所有伟大的答复。似乎其中一些正在起作用,但只让我成功了一半。也许更详细的描述会有所帮助

我想获取原始文件夹中的所有 mp3 文件,以便获取所有名称,然后将它们添加到 URI 以通过以下方式播放随机 MP3...

String uriStr = "android.resource://"+ "com.example.phone"+ "/" + "raw/dennis";
Uri uri = Uri.parse(uriStr);
singletonMediaPlayer = MediaPlayer.create(c, uri);

当我将“dennis.mp3”放入资产文件夹时,它确实按预期显示,但是,使用上面的代码,我无法再访问该 MP3,除非有以下内容:

String uriStr = "android.assets://"+ "com.example.phone"+ "/" + "dennis";
Uri uri = Uri.parse(uriStr);
4

6 回答 6

70

要列出原始资产的所有名称,这些名称基本上是去掉了扩展名的文件名,您可以这样做:

public void listRaw(){
    Field[] fields=R.raw.class.getFields();
    for(int count=0; count < fields.length; count++){
        Log.i("Raw Asset: ", fields[count].getName());
    }
}

由于实际文件一旦在电话上就不仅仅位于文件系统上,因此名称无关紧要,您需要通过分配给该资源名称的整数来引用它们。在上面的例子中,你可以得到这个整数:

int resourceID=fields[count].getInt(fields[count]);

这与您通过引用 R.raw.whateveryounamedtheresource 获得的 int 相同

于 2011-06-30T19:46:53.107 回答
10

此代码将从 sdCard 的“New Foder”中检索所有文件。

    File sdCardRoot = Environment.getExternalStorageDirectory();
    File yourDir = new File(sdCardRoot, "New Folder");
    for (File f : yourDir.listFiles()) {
        if (f.isFile())         
        {               
           String name = f.getName();           
           Log.i("file names", name);          

        }

     }

并确保在您的 manifest.xml 文件中添加 android sd 卡写入权限

于 2014-01-02T08:55:57.147 回答
4

我需要 res/raw/ 中所有文件的名称(字符串)

设备上没有文件res/raw/。这些是资源。R.raw除了使用反射来遍历类的静态数据成员以获取各种 ID 名称和值之外,没有什么好的方法可以遍历资源。

但并不能真正帮助我找出原始文件夹的存在位置。

作为一个文件夹,它只存在于您的开发机器上。它不是设备上的文件夹。

于 2011-06-30T19:01:25.617 回答
3

您可以使用AssetManager

据我所知,您将拥有列表(只需尝试不同的路径):

final String[] allFilesInPackage = getContext().getResources().getAssets().list("");
于 2011-06-30T19:06:52.770 回答
2

查看http://developer.android.com/reference/android/content/res/Resources.html 您通常可以通过 getResources() 获取与您的应用程序关联的 Resources 实例。

Resources 类提供对http://developer.android.com/reference/android/content/res/AssetManager.html的访问(参见 getAssets() 方法)。最后使用 AssetManager.list() 方法获得对打包(apk)文件的访问权限。享受!

于 2011-06-30T19:08:03.727 回答
1

从 a Context,您可以这样调用:

getResources().getAssets().list("thePath");

文档链接

于 2011-06-30T19:03:19.817 回答