【问题标题】:Why my created ZIP file doesn't work in a game?为什么我创建的 ZIP 文件在游戏中不起作用?
【发布时间】:2012-07-26 14:38:48
【问题描述】:

我最近决定为我的项目编写一个启动器。它只是从我的服务器下载更新的文件,解压缩它们,合并一些文件(因为它们的内容因启动器的设置而异)并将它们打包成一个 .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,相同的属性并正确解包。但是第一个游戏崩溃了,第二个运行流畅。我的想法不多了。有什么帮助吗?

【问题讨论】:

  • 想法?将 winrar 与您的应用程序捆绑在一起,并在您启动游戏时让它添加一个垃圾文件? :-)
  • Java 是否将其保存为 Zip64 格式?
  • 我如何检查这个?如果是的话呢?

标签: java windows file zip corrupt


【解决方案1】:

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

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

【讨论】:

  • 我已经修改了我的代码(第二个)。当我打印出 zip 的内容时,结构是正确的。现在怎么了?
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多