【问题标题】:LibGDX isDirectory() returns false even though it is a directoryLibGDX isDirectory() 返回 false,即使它是一个目录
【发布时间】:2017-09-14 01:40:48
【问题描述】:

我目前正在尝试获取目录中的文件列表。 当我尝试获取目录的文件句柄时,它说它是一个文件,但它不是。然后,当我从中 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

终端输出

是的

线程“LWJGL 应用程序”中的异常 java.lang.NullPointerException
在 java.io.FilterInputStream.read(Unknown Source)
在 sun.nio.cs.StreamDecoder.readBytes(未知来源)
在 sun.nio.cs.StreamDecoder.implRead(未知来源)
在 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)
在 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)

【问题讨论】:

    标签: java file-io libgdx


    【解决方案1】:

    我在 Assets list -&gt; 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 选项卡上的输出:



    list/enemy/1.png
    list/enemy/2.png
    list/enemy/3.png

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

    这是我的预期输出。

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

    【讨论】:

    • 您在哪个平台上运行?对于 Windows 上的我来说,Internal FileHandle 上的 list() 返回一个空数组,正如基于该方法的 Javadocs 所预期的那样。
    • 我用 Intellij IDEA 尝试了 Windows 和 Mac,它给了我一个非零长度数组。根据文档,它应该是一个零长度数组,所以我尝试了 Eclipse Neon.3,然后我得到了零长度数组。为什么某些 IDE 给我非零长度数组?
    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 2013-12-10
    • 2017-01-28
    • 2012-05-11
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多