【问题标题】:Android, how do can I get a list of all files in a folder?Android,如何获取文件夹中所有文件的列表?
【发布时间】:2011-06-30 18:57:04
【问题描述】:

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

我试过了:

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

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

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

我想获取原始文件夹中的所有 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);

【问题讨论】:

  • 我怀疑您无法通过 URI 引用原始资产。您可能需要将其作为 AssetFileDescriptor 对象传递。只需调用 getResources().openRawResourceFd(resourceID);

标签: android android-file


【解决方案1】:

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

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 相同

【讨论】:

  • 谢谢!完全符合我的需要:)
  • 澄清使用 java.lang.reflect.Field[]
  • @Captain Blammo,主机上的目录怎么样?我可以获取 Internet 主机目录中的文件列表吗?
  • 不,这是一种完全不同的技术。这仅适用于编译时资源目录中的本地文件。
  • 如果我们想遍历派生项目的 R 类,这不起作用。关于如何处理这些方面的任何想法?
【解决方案2】:

此代码将从 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 卡写入权限

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      你可以使用AssetManager

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

      final String[] allFilesInPackage = getContext().getResources().getAssets().list("");
      

      【讨论】:

        【解决方案5】:

        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)文件的访问权限。 享受吧!

        【讨论】:

          【解决方案6】:

          Context,您可以这样调用:

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

          link to documentation

          【讨论】:

          • 这适用于资产,在这种情况下可能是 OP 的更好选择。但资产与原始资源不同。
          • @Commons:我想我的印象是 /res 下的所有内容都被视为资产......嗯......
          • 资产指的是assets/,而不是res/raw/,我上次检查过。
          猜你喜欢
          • 2013-11-26
          • 2011-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-17
          • 2015-05-16
          相关资源
          最近更新 更多