在我的资源文件夹中,我有一个名为" 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。
这对于从目录中获取文件看起来非常直接的方式来说非常令人费解。
有没有人有任何想法可以绕过这个?
答案 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;
}