这是一个递归解决方案。我没有测试它,但我认为它应该可以工作:
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 和 桌面上当前用户的主目录
系统。
使用 internal 和 absolute 以及 external 检查函数。如前所述,请注意外部是相对于您的用户目录的!例如C:/Users/user/... 只需将正确的句柄传递给它。