LibGDX isDirectory()返回假即使它是一个目录

问题描述:

我目前正在尝试获取目录中的文件列表。 当我尝试获取目录的文件句柄时,它说它是一个文件,但它不是。当我从它readString(),它返回其中的文件的文件名。这只发生在IDE(Eclipse NEON.2)中,但当我导出到JAR时,它会在我尝试运行时崩溃。LibGDX isDirectory()返回假即使它是一个目录

如何让LibGDX将其识别为目录并获取该目录中的所有文件。最后一件事,我看到很多安道尔说list()在桌面上不起作用,但我也读过它的作品。有人可以检查这是否属实。

public void loadEnemyBaseTypes(){ 
    ArrayList<FileHandle> enemyBaseFiles = new ArrayList<FileHandle>(); 
    FileHandle enemyBaseDirectory = 
     Gdx.files.internal("prototypes/enemybases"); 

    System.out.println(enemyBaseDirectory.exists()); 
    System.out.println(enemyBaseDirectory.isDirectory()); 

    String[] fileNames = enemyBaseDirectory.readString().split("\n"); 

    for(int i = 0; i < fileNames.length; i++) 
     System.out.println(fileNames[i]); 
} 

IDE输出



base_0.enybse
base_1.enybse
base_2.enybse
base_3.enybse
base_4.enybse
base_5 .enybse

端子输出



在java.io.FilterInputStream.read异常在线程 “LWJGL应用程序” 显示java.lang.NullPointerException
(来源不明)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
在sun.nio.cs.StreamDecoder.read(未知来源)
在java.io.InputStreamReader.read(未知来源)
在java.io.Reader.read(未知来源)
在com.badlogic .gdx.files.FileHandle.readString(FileHandle.java:207)
在com.badlogic.gdx.files.FileHandle.readString(FileHandle.java:191)
在dev.thomaslienbacher.simplegame.controllers.EnemyManager.loadEnemyBaseTypes (EnemyManager.java:53)
at dev.thomaslienbacher.simplegame.controllers.EnemyManager.loadAssets(EnemyManager.java:33)
at dev.thomaslienbacher.simplegame.scene.GameS cene.loadAssets(GameScene.java:62)
在dev.thomaslienbacher.simplegame.Game.update(Game.java:149)
在dev.thomaslienbacher.simplegame.Game.render(Game.java:134)
在com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:223)
在com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:124)

我在资产list -> enemy内创建了嵌套文件夹,然后我在敌人文件夹中保留了三个.png文件,名称分别为1.png,2.png3.png

FileHandle enemyBaseDirectory = Gdx.files.internal("list/enemy"); 

System.out.println(enemyBaseDirectory.exists()); 
System.out.println(enemyBaseDirectory.isDirectory()); 

FileHandle allList[]=enemyBaseDirectory.list(); 

for (FileHandle fileHandle:allList) 
    System.out.println(fileHandle); 

在IDE输出Run标签:

真正
真正
列表/敌人/ 1.png
列表/敌人/ 2.png
列表/敌人/ 3.png

IDE本地没有任何输出Terminal。我的IDE是Intellij IDEA,希望结果应该在其他IDE上相同。

这是我的预期产出。

文件句柄的readString()整个文件读入使用平台的默认字符集的字符串,如果文件句柄表示一个目录,不存在或无法读取则抛出GdxRuntimeException

+0

你在哪个平台上运行?对我来说,在Windows上,内部FileHandle上的'list()'返回一个空数组,如预期基于方法的Javadocs。 – Tenfour04

+0

我用Intellij IDEA尝试了Windows和Mac,它给了我一个非零长度的数组。根据文档它应该是一个零长度的数组,所以我尝试了Eclipse Neon.3,然后我得到了零长度的数组。为什么一些IDE给我非零长度的数组? – Aryan