各位大虾,以下是小弟写的一个解压缩程序,发现如果文件比较小比如下例:
D:\test\zip>java Unzip 3.zip
...writing 1.txt
317
-1
...writing 2.doc
22528
-1
就能正常解出两个文件。但是,如果文件稍大,比如下例:
D:\test\zip>java Unzip jpg.zip
...writing 1.jpg
159865
12034
...writing 2.jpg
9894
1691
就不能解出正确的文件。
请大虾们指教,以下是代码:
import java.io.*;
import java.util.zip.*;
import java.util.*;public class Unzip{
private ZipFile archive;
private String zipName;  //压缩文件名
private Enumeration zipFiles;

public Unzip(String fileName){
zipName = fileName;
}

public int uncompress(){
try{
archive = new ZipFile(zipName); 
zipFiles = archive.entries();
for(;zipFiles.hasMoreElements();){
ZipEntry entry = (ZipEntry)zipFiles.nextElement();
String fileName = entry.getName();
fileName = fileName.replace('/', File.separatorChar);
File destFile = new File(fileName);
if(destFile.isDirectory()){   //处理目录
destFile.mkdir();
continue;
}
if(destFile.exists()){      //文件存在就略过
System.out.println("...skipping " + fileName);
}
else{
System.out.println("...writing " + fileName);
String parent = destFile.getParent();
if(parent != null){                  //处理路径
File parentFile = new File(parent);
parentFile.mkdir();
}
InputStream in = archive.getInputStream(entry);
FileOutputStream out = new FileOutputStream(fileName);
byte[] buffer = new byte[in.available()];
System.out.println(in.available());  //对文件大小进行输出      
System.out.println(in.read(buffer));   //对读到的字符大小进行输出
out.write(buffer);
System.out.println(in.read(buffer));     //剩余字符大小进行输出
in.close();
out.close();
}
}
}
catch(Exception e){
System.out.println(e);
return 1;
}
return 0;
}
public static void main(String[] args){
Unzip unzip;
try{
unzip = new Unzip(args[0]);
unzip.uncompress();
}
catch(Exception e){
System.out.println(e);
}