高分请教解压缩RAR程序代码?!

skyboy0720 2006-03-21 09:35:06
因为有个需求要用到,以前没做过,
搜索了半天也没找到我要的,想请教老鸟给个DEMO,谢谢了!
...全文
174 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mayi3 2006-05-23
高人啊。。
回复
ruanjiantaotao 2006-05-23
关注
回复
fll_0601 2006-05-23
我也需要啊,楼主你的OK了吗?
回复
chinabh 2006-05-23
是专利,没办法的,用winrar吧
回复
little06 2006-05-23
不知道有没有人知道WinRar的算法
知道了进行重写也可以阿
回复
tiannet 2006-05-23
java里貌似没提供解压rar文件得相关类
只有jar和zip得
回复
cangwu_lee 2006-05-23
rar 还是调用 winrar.exe 来实现吧
回复
lndlmy 2006-05-23
bitou(大鹏一日同风起,扶摇直上九万里) 正解。。不过只能解压JAR和ZIP
回复
huantianxidi 2006-05-23
这个程序我怎么解压不了啊?
public static void main(String[] arg)throws Exception{
File file = new File("E:\\1.rar");
Unzip.unzip(file,"E\\aa","\\aaa");
}
回复
crazy_he 2006-03-21
好像和gmail差不多
回复
天外流星 2006-03-21
学习了.
回复
bitou 2006-03-21

import java.io.*;
import java.util.zip.*;
import cn.com.ouyang.zip.*;
import cn.com.struts.exception.DefaultException;
import org.apache.log4j.Logger;

public class Unzip {
static Logger log = Logger.getLogger("--解压缩文件......");
/**
* 解压缩文件到directory目录,并且查找指定文件是否存在,如存在返回指定文件名,否则报错
*
* @param f File: zip文件
* @param directory String:解压缩的目录
* @param includedFile String:检查是否存在的文件,包含相对路径
* @return String
* @throws AppException:
* 当指定文件不存在时,抛出 AppException("err.file_not_found");
* 当zip中含有中文字符的文件名或目录名时,抛出AppException("err.zip_existChineseChar")
*/

public static String unzip(File f, String directory
, String includedFile) throws DefaultException {
int filecount = 0;
String fileName = null;
String tmpFileName = null;

boolean fileInclude = false;
if ("".equals(includedFile)) {
includedFile = null;
}
ZipInputStream zis = null;
BufferedOutputStream dest = null;

try {
final int BUFFER = 20480;
FileInputStream fis = new FileInputStream(f);
CheckedInputStream checksum = new CheckedInputStream(fis
, new Adler32());
// zis = new CZipInputStream(new BufferedInputStream(fis),"GBK");
zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
new File(directory).mkdirs();
while ( (entry = zis.getNextEntry()) != null) {

// tmpFileName = new String(entry.getName().getBytes("GBK"));
tmpFileName = new String(entry.getName());
int count;
byte data[] = new byte[BUFFER];
// write the files to the disk
String fn = directory + "/" + tmpFileName;

if (entry.isDirectory()) {
new File(fn).mkdirs();
continue;
} else {
if (includedFile == null
|| tmpFileName.equalsIgnoreCase(includedFile)) {
fileName = tmpFileName;
fileInclude = true;
}
filecount++;
if (!new File(fn).getParentFile().exists()) {
new File(fn).getParentFile().mkdirs();
}
new File(fn).createNewFile();
}

FileOutputStream fos = new FileOutputStream(fn);
dest = new BufferedOutputStream(fos, BUFFER);
while ( (count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
}
zis.close();
}

catch (Exception e) {
log.error( e);
throw new DefaultException("解压缩文件出现异常……");
} finally {
try {
zis.close();

} catch (IOException ex) {
log.error( ex);
}
try {
dest.close();
} catch (IOException ex) {
log.error( ex);
}
}
if (!fileInclude) {
throw new DefaultException("指定文件未找到!");
}
return (filecount <= 1) ? tmpFileName : fileName;
}

}
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-03-21 09:35
社区公告
暂无公告