【问题标题】:listFiles not workig after exporting to jar导出到 jar 后列出文件不起作用
【发布时间】:2016-03-22 12:02:21
【问题描述】:

我正在使用平铺制作地图的libgdx 游戏,在我的关卡选择屏幕中,我读取了地图文件夹中的所有文件并计算以.tmx 结尾的文件以查看我有多少关卡按钮必须做。

所有这些都运行良好,但是当我尝试使用 intellij gradle dist 命令将项目导出到 jar 时,它就停止了工作。

我猜它在导出文件时会更改文件的路径或其他内容,但我不知道如何修复它。

这是读取文件的代码

        new File("maps").listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            if (name.endsWith(".tmx")) {
                numberOfLevels++;
            }
            return true;
        }
    });

【问题讨论】:

  • maps 文件夹是否在 JAR 中?
  • 你的地图在哪里? new File("maps") 将在当前工作目录中查找我怀疑不是您想要的目录
  • maps文件夹在JAR里面,它在“Game -> core -> assets -> maps”
  • 它会找到其他所有内容,例如纹理/声音/图像

标签: java file intellij-idea jar


【解决方案1】:

要计算 jar 中 .tmx 文件的数量,请尝试将其视为 zip 并计算感兴趣的文件数量,如下所示:

List<String> classNames = new ArrayList<String>();
ZipInputStream zip = new ZipInputStream(new FileInputStream("/path/to/jar/file.jar"));
int numberOfLevels=0;
for (ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) {
    if (!entry.isDirectory() && entry.getName().endsWith(".tmx")) {
        numberOfLevels++;
    }
}

【讨论】:

  • 你不知道我在谷歌上搜索了多久试图找到答案,非常感谢你让我免于完全发疯!
  • 不用担心,很高兴为您提供帮助:)
【解决方案2】:

要像这样访问“地图”,它可能不包含在 jar 文件中,但需要与 jar 位于同一目录中。使用new File(...),您正在访问 PC 的文件系统,因为它是在 jar 文件中编译的,所以无法找到“maps”文件

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多