LibGDX获取文件夹+子文件夹中所有文件的文件句柄数组

时间:2014-01-23 22:08:58

标签: java file directory libgdx subdirectory

我需要为文件夹中的每个文件获取一个LibGDX FileHandle。我可以使用

来做到这一点
FileHandle [] filehandles;
filehandles=Gdx.files.external("/").list();

获取文件夹中的所有文件。但它没有给我子文件夹。我已经考虑在循环中使用if语句,该循环遍历文件夹中的所有内容,检查子文件夹然后也列出它们,但是id需要另一个数组,我不能确定有多少生病需要。它也是无穷无尽的。

1 个答案:

答案 0 :(得分:3)

这是一个递归解决方案。我没有测试它,但它应该工作我想:

public void getHandles(FileHandle begin, Array<FileHandle> handles)
{
    FileHandle[] newHandles = begin.list();
    for (FileHandle f : newHandles)
    {
        if (f.isDirectory())
        {
            Gdx.app.log("Loop", "isFolder!");
            getHandles(f, handles);
        }
        else
        {
            Gdx.app.log("Loop", "isFile!");
            handles.add(f);
        }
    }
}

getHandles(Gdx.file.external("/"))开头。根目录的处理程序。

只需使用一个数组。将它传递给方法,方法将用所有处理程序填充它。


更新: 你需要用正确的手柄调用它!因为如果您使用的是Android设备或桌面,这一点很重要。根据这个问题Libgdx How to get a list of files in a directory?

这样称呼:

    FileHandle dirHandle;
    if (Gdx.app.getType() == ApplicationType.Android)
    {
        dirHandle = Gdx.files.internal("data");
    }
    else
    {
        dirHandle = Gdx.files.internal("./bin/data");
    }
    Array<FileHandle> handles = new Array<FileHandle>();
    getHandles(dirHandle, handles);

如果您使用内部。否则使用绝对而不是外部。如果你传递一个空的FileHandle它将无法正常工作。

According to the wiki:

  

桌面(Windows,Linux,Mac OS X)

     

在桌面操作系统上,文件系统是一大块内存。文件可以   使用相对于当前工作目录的路径引用   (执行应用程序的目录)绝对路径。   忽略文件权限,文件和目录通常是可读的   并且可以被所有应用程序写入。

此外:

  

<强>外部
   外部文件路径相对于SD卡根目录   桌面上的Android和到当前用户的主目录   系统

使用内部 绝对以及外部检查功能。如上所述,请注意外部相对于您的用户目录!例如C:/Users/user/...只需将右手柄传递给它。