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

时间:2017-04-18 09:27:19

标签: java file-io libgdx

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

如何让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

终端输出

  


  假
  线程&#34; LWJGL应用程序&#34;显示java.lang.NullPointerException
  在java.io.FilterInputStream.read(未知来源)
  at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
  at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
  at sun.nio.cs.StreamDecoder.read(Unknown Source)
  在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)
  在dev.thomaslienbacher.simplegame.controllers.EnemyManager.loadAssets(EnemyManager.java:33)
  在dev.thomaslienbacher.simplegame.scene.GameScene.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)

1 个答案:

答案 0 :(得分:0)

我在资产list -> enemy中创建了嵌套文件夹,然后我将三个.png文件保存在名为1.png2.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的结果应该相同。

这是我的预期输出。

FileHandle&#39; readString()使用平台的默认字符集将整个文件读入字符串,如果文件句柄代表目录,则不存在,或者无法读取抛出GdxRuntimeException