gpt4 book ai didi

java - 为什么我创建的 ZIP 文件在游戏中不起作用?

转载 作者:可可西里 更新时间:2023-11-01 10:27:19 26 4
gpt4 key购买 nike

我最近决定为我的项目编写一个启动器。它只是从我的服务器下载更新的文件,解压它们,合并一些文件(因为它们的内容因启动器的设置而异)并将它们打包成一个 .zip 文件。

我确信下载和合并过程完美无缺,但最后一个 - 压缩 - 没有。

这是我的压缩代码:

-- 这是我无法运行的代码所在的位置。 --

.zip 文件已正确创建,但是当我将其放入游戏目录时,游戏无法启动(说它已损坏)。但是,如果我用 WinRar 打开它(是的,它打开时没有错误 - “测试”功能也没有显示错误)并且只需在其中添加一个随机文件,游戏就会开始!

似乎 WinRar 以正确的方式重新创建了 zip 文件,但我无法让我的启动器这样做。

有什么想法吗?

编辑 1:

我发现了另一段应该有效的代码:



private static void zipDir(String zipFileName, String dir) throws Exception {
File dirObj = new File(dir);
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
System.out.println("Creating : " + zipFileName);
addDir(dirObj, out);
out.close();
}

static void addDir(File dirObj, ZipOutputStream out) throws IOException {
File[] files = dirObj.listFiles();
byte[] tmpBuf = new byte[1024];

for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
addDir(files[i], out);
continue;
}
String fap = files[i].getAbsolutePath();
String rel_path = fap.substring(fap.indexOf("wypakowane") + 11).replace("\\", "/");
FileInputStream in = new FileInputStream(fap);
System.out.println(" Adding: " + rel_path);
out.putNextEntry(new ZipEntry(rel_path));
int len;
while ((len = in.read(tmpBuf)) > 0) {
out.write(tmpBuf, 0, len);
}
out.closeEntry();
in.close();
}
}

我认为它会在 ZIP 文件中创建目录。不幸的是,游戏仍然没有开始......(“wypakowane”是包含我要放入 ZIP 文件中的所有文件的目录。)

编辑 2:

我刚刚比较了两个文件 - 一个由我的 java 应用程序创建的,另一个由 WinRar 通过添加随机文件创建的。它们是相同的,具有相同的 CRC、相同的属性并且正确解压。但是游戏在第一个游戏中崩溃,而在第二个游戏中运行流畅。我的想法不多了。有帮助吗?

最佳答案

您似乎没有为目录本身创建条目,而只是为文件创建条目。虽然可以从文件路径重建目录条目,但如果您不放入显式条目,许多软件将无法正确处理该文件。

目录条目只是路径以“/”结尾的常规条目。

关于java - 为什么我创建的 ZIP 文件在游戏中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com