我正在为游戏制作一个改装应用程序。当我解压缩并压缩相同的文件时:出于某种原因,尽管它可以在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);
}
}
}
答案 0 :(得分:0)
如果不调试代码,我可以说最可能的原因是压缩级别。默认压缩级别为Deflater.DEFAULT_COMPRESSION。您可以使用ZipOutputStream.setLevel()更改它。
我相信您使用jar实用程序或其他zip创建器创建了原始jar文件。然后你使用你的代码创建了相同的大小。在这种情况下,压缩级别可以解释差异。