/**
* 按照原路径的类型就行压缩。文件路径直接把文件压缩,
* @param src
* @param zos
* @param baseDir
*/
private static void zip(File src, ZipOutputStream zos,String baseDir,String uuid) {
if (!src.exists())
return;
//判断文件是否是文件,如果是文件调用compressFile方法,如果是路径,则调用compressDir方法;
if (src.isFile()) {//src是文件
compressFile(src, zos, baseDir);
} else if (src.isDirectory()) {//src是文件夹
compressDir(src, zos, baseDir,uuid);
}
}
/**
* 压缩文件
*/
private static void compressFile(File file, ZipOutputStream zos,String baseDir) {
if (!file.exists())
return;
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(baseDir + file.getName());
zos.putNextEntry(entry);
int count;
byte[] buf = new byte[1024];
while ((count = bis.read(buf)) != -1) {
zos.write(buf, 0, count);
}
bis.close();
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 压缩文件夹
*/
private static void compressDir(File dir, ZipOutputStream zos,String baseDir,String uuid) {
if (!dir.exists())
return;
File[] files = dir.listFiles();
if(files.length == 0){
try {
zos.putNextEntry(new ZipEntry(baseDir + dir.getName()+File.separator));
} catch (IOException e) {
e.printStackTrace();
}
}
for (File file : files) {
if(uuid.equals(dir.getName())){
zip(file, zos, File.separator ,uuid);
}else{
zip(file, zos, baseDir + dir.getName() + File.separator,uuid);
}
}
}
这是继上一篇的修改版,毕竟漏洞太多以后看着会很麻烦,小白一个,不喜勿喷