LibGdx无法从目录中获取文件

时间:2016-01-30 09:02:18

标签: java file libgdx directory

在我的资源文件夹中,我有一个名为" maps"的目录。其中包含我要加载的图像列表。

运行时:

Gdx.files.internal("maps").exists();

返回true

Gdx.files.internal("maps/Africa.png").exists();

也会返回true

但是,尝试列出这些文件似乎是不可行的:

Gdx.files.internal("maps").list().length;

为该目录中的文件数返回值0

此外:

Gdx.files.internal("maps").isDirectory();

返回false。

这对于从目录中获取文件看起来非常直接的方式来说非常令人费解。

有没有人有任何想法可以绕过这个?

1 个答案:

答案 0 :(得分:1)

由于桌面版本无法在内部目录上使用list()方法,因此我创建了此脚本以将文件名写入文本文件。它使用Apache commons.io(您可以将compile "commons-io:commons-io:2.4+"放入build.gradle以将其包含在桌面模块中):

//directories within assets that you want a catalog of
static final String[] directories = {
        "completeMaps",
        "typeAMaps",
        "typeBMaps",
        "sfx",
        "music"
};

public static void main (String[] args){
    String workingDir = System.getProperty("user.dir");
    for (String dir : directories){
        File directory = new File(workingDir + "/" + dir);
        File outputFile = new File(directory, "catalog.txt");
        FileUtils.deleteQuietly(outputFile); //delete previous catalog
        File[] files = directory.listFiles();
        try {
            for (int i = 0; i < files.length; i++) {
                FileUtils.write(outputFile, files[i].getName() + (i == files.length - 1 ? "" : "\n"), true);
            }
        } catch (IOException e){
            Util.logError(e);
        }
    }
}

然后在目录中获取文件列表:

private FileHandle[] readDirectoryCatalogue (String directory){
    String[] fileNames = Gdx.files.internal(directory + "/catalog.txt").readString().split("\n");
    FileHandle[] files = new FileHandle[fileNames.length];
    for (int i = 0; i < fileNames.length; i++) {
        files[i] = Gdx.files.internal(directory + "/" + fileNames[i].replaceAll("\\s+",""));
    }
    return files;
}