【已解决】Java zip解压时候 malformed input off : 4, length : 1
Java zip解压时候 malformed 解决方案
需求:通过页面上传ZIP文件后,对zip文件进行解压。
遇到的错误:在进行zip解压的时候错误如下:

先看报错前的:
/**
* 解压缩ZIP文件
* @param zipFile ZIP文件
* @param destDir 目标路径
*/
public static void zipDecompress(File zipFile, File destDir) {
byte[] buffer = new byte[1024];
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
ZipEntry entry = zis.getNextEntry();
if(!destDir.exists()){
destDir.mkdirs();
}
while (entry != null) {
File file = new File(destDir, entry.getName());
if (entry.isDirectory()) {
file.mkdirs();
} else {
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
try (FileOutputStream fos = new FileOutputStream(file)) {
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
}
entry = zis.getNextEntry();
}
} catch (IOException e) {
e.printStackTrace();
}
}分析原因:

然后查询后得到:

如果在Java中解压文件时报错 “malformed”,通常表示压缩文件的格式不正确或损坏。下面是一些可能导致此错误的常见原因和解决方法:
我试了集中方法都不行,最后看有人说是编码问题,加上GBK编码格式后解析成功
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file,Charset.forName("GBK"));解决方案:
所以修改代码,在生产ZipInputStream时候添加编码:

扩展:
这个功能涉及到的知识点:
web的文件上传
将上传文件上传到服务器上
对zip文件进行解压
一、web文件上传:
@RequestMapping("/create-picture")
public ResponseResult<String> createPicture(@RequestParam(value = "file") MultipartFile zipFile){
createPictureReportingThread.startCreateDataReport(param,zipFile);
return ResponseResult.success("请等待五分钟后,在报告列表中查询");
}二、将上传的文件上传到服务器上
public void makePictureReport( MultipartFile MultipartZipFile) {
InputStream fis = null;
try {
String originalFileName = MultipartZipFile.getOriginalFilename();
String extendFileName = originalFileName.substring( originalFileName.lastIndexOf('.'));
System.out.println("extendFileName:"+extendFileName);
//校验是否为ZIP
//生成新的文件名称
String saveFileName = UUID.randomUUID().toString().replace("-","");
String relativeFileDir = DateUtil.format(new Date(), "yyyyMMddHHmmSSS")+ File.separator+ saveFileName ;
//上传文件
String fileBasePath = baseFileDir+relativeFileDir;
FileUtils.uploadFile(MultipartZipFile,fileBasePath , saveFileName+extendFileName);
//解压zip文件
String decompressPath = fileBasePath+ File.separator+ "decompress"+ File.separa原创不易,完成人机校验,阅读全文
相关推荐
工作小总结Linux :压缩文件或目录及解压命令(包含:zip 、tar.gz)工作小总结Java 下载zip文件经验分享java获取properties的时候乱码解决工作小总结input标签内发生变化进行监听工作小总结java爬虫问题一:解决使用htmlunit 时候ssl认证失败问题经验分享【mysql】mysql字符集设置为:utf8mb4,创建表时候错误Specified key was too long; max key length is 767 bytes工作小总结【已解决】使用jasypt的jar对文本加密的时候,提示java.security.NoSuchAlgorithmException错误怎么解决经验分享JDK8的stream将list转Map对象时候报错:java.lang.IllegalStateException,解决