Java常用文件操作
多个文件打ZIP压缩包
public class ZipUtil {
/**
* 获取压缩文件
* @param map 文件名+文件流
* @param zipName 压缩文件名称:例如test.zip
* @return
* @throws IOException
*/
public static File getZipFile(Map<String, InputStream> map, String zipName) throws IOException {
File zipFile = new File(zipName);
if(!zipFile.exists()){
zipFile.createNewFile();
}
zip(zipFile, map);
return zipFile;
}
/**
*
* @param zipFile 压缩文件
* @param map 要压缩的文件集合
* @throws IOException
*/
public static void zip(File zipFile, Map<String, InputStream> map) throws IOException {
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zipOutputStream = new ZipOutputStream(fos);
byte[] buffer = new byte[1024];
for (Map.Entry<String, InputStream> data : map.entrySet()) {
//文件名
String fileName = data.getKey();
//文件流
InputStream inputStream = data.getValue();
ZipEntry zEntry = new ZipEntry(fileName);
zipOutputStream.putNextEntry(zEntry);
int nNumber;
while ((nNumber = inputStream.read(buffer)) != -1) {
zipOutputStream.write(buffer, 0, nNumber);
}
zipOutputStream.closeEntry();
}
zipOutputStream.close();
}
}
文件下载
import cn.hutool.core.io.FileUtil;
public class ZipUtil {
public ResponseEntity download(InputStream inputStream, String fileName) {
Resource resource = new InputStreamResource(inputStream);
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String header = request.getHeader("User-Agent");
// 避免空指针
header = header == null ? "" : header.toUpperCase();
HttpStatus status;
if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
fileName = UrlUtil.encodeURL(fileName, Charsets.UTF_8);
status = HttpStatus.OK;
} else {
fileName = new String(fileName.getBytes(Charsets.UTF_8), Charsets.ISO_8859_1);
status = HttpStatus.CREATED;
}
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", fileName);
String mimeType = FileUtil.getMimeType(fileName);
headers.setContentType(MediaType.parseMediaType(mimeType));
return new ResponseEntity(resource, headers, status);
}
}