jar压缩和解压在java中
我知道这是一项简单的任务,但在更改代码后,它停止了工作,我无法恢复!我使用两个函数来压缩和解压,尽管它实际上做的是“jar”和“unjar”,但这不会有太大的区别
public static void zipit(File[] infiles, JarOutputStream jos) throws Exception
{
zipit(infiles,"", jos);
}
public static void zipit(File[] infiles, String root, JarOutputStream jos) throws Exception
{
byte[] buffer = new byte[4096];
for(int i=0; i<infiles.length; i++)
{
// recursive call for subfolders... temporary
if(infiles[i].isDirectory())
{
zipit(infiles[i].listFiles(), infiles[i].getName() + "/", jos);
continue;
}
// create string with absolute path
String entryfile = root + infiles[i].getName();
JarEntry entry = new JarEntry(entryfile);
zos.putNextEntry(entry);
FileInputStream fis = new FileInputStream(infiles[i]);
int count;
while((count = fis.read(buffer, 0, buffer.length)) != -1)
zos.write(buffer, 0, count);
}
}
public static void unzipit(File zipfile, File outputfolder) throws Exception
{
JarFile jar = new JarFile(zipfile);
for(Enumeration entries = jar.entries(); 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();
FileOutputStream fos = new FileOutputStream(unzipped);
InputStream in = jar.getInputStream(entry);
byte[] buffer = new byte[4096];
int count;
while((count = in.read(buffer, 0, buffer.length)) != -1)
fos.write(buffer, 0, count);
fos.close();
}
}
有什么帮助/建议吗
创建JAR文件时出错:
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:131)
at java.util.jar.JarFile.<init>(JarFile.java:150)
at java.util.jar.JarFile.<init>(JarFile.java:114)
# 1 楼答案
我不知道这是否是你的问题,但通常在写完文章后关闭每个zip条目是一种很好的做法
见^{}
在您显示的代码中,zip中的最后一个条目不会被关闭。您也不会显示关闭JarOutputStream本身的位置。这可能会导致您创建无效的zip文件,当使用其他方法读回这些文件时,会出现错误
# 2 楼答案
不知怎么的,我让它工作了,很明显它与流有关。。。谢谢大家的帮助