Java文件压缩与解压缩(三)(六)

2014-11-24 10:55:44 · 作者: · 浏览: 5
les[i];
//若是文件,递归调用fileToZip()
if (file.isFile()) {
fileToZip2(file.getAbsolutePath(), zos);
}
//若是文件,递归调用dirToZip()
if (file.isDirectory()) {
dirToZip2(file.getAbsolutePath(),file, zos);
}
}
}
}
/**
* @param rawPath 需要压缩的目录或者文件的完整路径
* @param file 需要压缩的文件
* @return entryName
*/
public String getEntryName2(String rawPath,File file){//file是rawPath对应的file
try {
String rawDir=rawPath.substring(3);
int rawDirIndex=file.getAbsolutePath().indexOf(rawDir);
String entryName=file.getAbsolutePath().substring(rawDirIndex);
return entryName;
} catch (Exception e) {
}
return null;
}
/**
* @param zipedFilePath 原压缩文件的路径
* @param unzipPath 文件解压后的路径
*/
public void unZipFile2(String zipedFilePath, String unzipPath) {
FileOutputStream fos=null;
InputStream is=null;
ZipEntry zipEntry=null;
String perUnzipFileName=null;
if (!unzipPath.endsWith(File.separator)) {
unzipPath+=File.separator;
}
try {
ZipFile zipFile=new ZipFile(zipedFilePath);
Enumeration entries=zipFile.entries();
byte [] buffer=new byte[1024*8];
int len=0;
while (entries.hasMoreElements()) {
zipEntry = (ZipEntry) entries.nextElement();
perUnzipFileName = unzipPath + zipEntry.getName();
if (zipEntry.isDirectory()) {//对付空文件夹的情况
new File(perUnzipFileName).mkdirs();
} else {
// 总是执行该代码.因为压缩的时候是对每个文件进行压缩的.
new File(perUnzipFileName).getParentFile().mkdirs();
// 根本没有创建文件的步骤
}
//注意这个判断 上面是用zipentry 来判断的
//下面使用perUnzipFile来判断
File perUnzipFile = new File(perUnzipFileName);
if (perUnzipFile.isDirectory()) {//对空而言的 所以里面的内容可以注释掉
File[] files = perUnzipFile.listFiles();
for (int i = 0; i < files.length; i++) {
File file = files[i];
fos = new FileOutputStream(file);
is = zipFile.getInputStream(zipEntry);
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}
} else {//不能用isFIle来判断 是错误的
fos = new FileOutputStream(perUnzipFile);
is = zipFile.getInputStream(zipEntry);
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}
//还是文件和目录的问题
// if (perUnzipFile.isFile()) {
// fos = new FileOutputStream(perUnzipFile);
// is = zipFile.getInputStream(zipEntry);
// while ((len = is.read(buffer)) != -1) {
// fos.write(buffer, 0, len);
// }
// System.out.println("123456789");
// }
}
if (fos!=null) {
fos.close();
}