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

时间:2012-07-26 14:38:48

标签: java windows file zip corrupt

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

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

这是我的压缩代码:

- 这是我的工作代码所在的地方。 -

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

似乎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,相同的属性并正确解压缩。但游戏与第一个游戏崩溃,并与第二个游戏顺利运行。我的想法已经不多了。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

您似乎没有为目录本身创建条目,仅针对文件。虽然目录条目可以从文件路径重建,但如果你没有输入显式条目,很多软件将无法正常使用该文件。

目录条目只是一个常规条目,其中路径以“/".

结尾