java - 压缩和解压 jar ,大小不一样!

标签 java jar zip unzip

我正在为游戏制作一个模组应用程序。当我解压缩和压缩相同的文件时:由于某种原因,尽管它可以使用 7Zip 打开,但在实际应用程序中却无法打开。尽管我没有编辑解压缩的文件 - 它丢失了几个字节。 我从网上收集了这些方法,在过去的 5 个小时里一直在编辑和重试,但没有成功,有帮助吗?谢谢!

这是我的代码:

class zipper
{
     static byte[] buffer = new byte[4096];

     public static void unzip(File zipfile, File outputfolder)  throws Exception
     {
         JarFile zip = new JarFile(zipfile);

         Enumeration entries = zip.entries();
         while(entries.hasMoreElements())
         {
             JarEntry entry = (JarEntry) entries.nextElement();
             File unzipped = new File(outputfolder,entry.getName());

             if (entry.isDirectory() && !unzipped.exists())
             {
                 unzipped.mkdirs();
                 continue;
             }
             else if (!unzipped.getParentFile().exists())
                 unzipped.getParentFile().mkdirs();

             InputStream in = zip.getInputStream(entry);
             FileOutputStream fos = new FileOutputStream(unzipped);

             int count;
             while((count = in.read(buffer, 0, buffer.length)) != -1)
                 fos.write(buffer, 0, count);

             // clean up
             fos.close();
             in.close();
         }
   }

   public static void zip(File[] infiles, JarOutputStream jos) throws Exception
   {
       zip(infiles,"",jos);

       // clean up
       jos.flush();
       jos.close();
   }

   public static void zip(File[] infiles, String basefolder, JarOutputStream jos) throws Exception
   {
        FileInputStream fis = null;
       for(int i=0; i<infiles.length; i++)
       {
           if(infiles[i].isDirectory())
           {
               // recursive call for directories
               zip(infiles[i].listFiles(), infiles[i].getName() + File.separator, jos);
               continue;
           }

           String filepath = basefolder + infiles[i].getName();
           JarEntry entry = new JarEntry(filepath);
           jos.putNextEntry(entry);

           fis = new FileInputStream(infiles[i]); // get stream

           int count;
           while((count = fis.read(buffer, 0, buffer.length)) != -1)
               jos.write(buffer, 0, count);
       }
   }
}

最佳答案

在不调试代码的情况下,我可以说最可能的原因是压缩级别。默认压缩级别是Deflater.DEFAULT_COMPRESSION。您可以使用 ZipOutputStream.setLevel() 更改它。

我相信您是使用 jar 实用程序或其他 zip 创建器创建了原始 jar 文件。然后,您使用代码创建了相同的内容并获得了不同的大小。在这种情况下,压缩级别可以解释这种差异。

关于java - 压缩和解压 jar ,大小不一样!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705280/

相关文章:

java - TrueZip 递归解压缩?

java - EMF 编辑域命令创建

java - 我应该怎么做才能通过 Domino Designer 中的外部 jar 的 import 语句获取类?

jar - Hadoop HADOOP_CLASSPATH 问题

java - 修改 zip 的长路径名

java - 如何从 Java 中的 Winzip 自解压 (exe) zip 文件中读取?

java - 为什么不使用自定义比较器从TreeSet中删除,则会删除较大的项集?

java - 特定异常与异常

java - Hadoop jar 引发反射时使用反射程序运行java.lang.NoClassDefFoundError

java - 将文件添加到 ZIP 文件