java实现将文件夹或有子文件夹的父文件夹压缩成.zip
service层
public void compressZip(ZipOutputStream zipOutput, File file, String base) throws IOException {
if(file.isDirectory()){
File[] listFiles = file.listFiles();
for(File fi : listFiles){
if(fi.isDirectory()){
compressZip(zipOutput, fi, base + File.separator + fi.getName());
}else{
zip(zipOutput, fi, base);
}
}
}else{
zip(zipOutput, file, base);
}
}
public void zip(ZipOutputStream zipOutput, File file, String base) throws IOException, FileNotFoundException {
ZipEntry zEntry = new ZipEntry(base + File.separator + file.getName());
zipOutput.putNextEntry(zEntry);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
int read = 0;
while((read =bis.read(buffer)) != -1){
zipOutput.write(buffer, 0, read);
}
bis.close();
}
controller层
@GetMapping(value = "/package")
@Operation(summary = "打包上传")
public R<String> packages(@RequestParam("path") String path) throws IOException {
File file = new File(path);
ZipOutputStream zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file.getAbsolutePath() + ".zip")));
String base = file.getName();
Service.compressZip(zipOutput, file, base);
zipOutput.closeEntry();
zipOutput.close();