【问题标题】:LibGDX get filehandle array for all files in folder + subfoldersLibGDX获取文件夹+子文件夹中所有文件的文件句柄数组
【发布时间】:2014-02-14 17:17:49
【问题描述】:

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

FileHandle [] filehandles;
filehandles=Gdx.files.external("/").list();

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

【问题讨论】:

    标签: java file directory libgdx subdirectory


    【解决方案1】:

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

    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);
    

    如果您使用内部。否则使用 absolute 而不是外部的。如果你传递一个空的 FileHandle 它将不起作用。

    According to the wiki:

    桌面(Windows、Linux、Mac OS X)

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

    此外:

    外部:
    外部文件路径是相对于上的 SD 卡根目录 Android 和 桌面上当前用户的主目录 系统。

    使用 internalabsolute 以及 external 检查函数。如前所述,请注意外部是相对于您的用户目录的!例如C:/Users/user/... 只需将正确的句柄传递给它。

    【讨论】:

    • 我会将数组传递给方法。
    • 我觉得没关系
    • 这是一个很好的做法。当每个递归的唯一目的是将所有元素添加到另一个数组时,为每个递归创建一个新数组的好处为零。如果以正确的方式做事不需要任何费用,那么您应该这样做。
    • 我似乎对handles.add(f) 上的NPE 感到困惑
    • 好吧,如果我使用 /FOLDER_NAME 而不是 / 作为目录,我不会得到 NPE。但现在它什么也不做,它甚至不运行 for 循环,因为我使用 println 来检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2013-11-26
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多