请教:一个解压缩的流处理问题

yan_77 2008-04-15 11:18:53
各位大虾,以下是小弟写的一个解压缩程序,发现如果文件比较小比如下例:
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);
}
}
}
...全文
72 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodmrning 2008-04-15
  • 打赏
  • 举报
回复
学习

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧