工作流导入
@Override
public int create(MultipartFile file, String name, String category) {
try{
if (file != null) {
String path = "E:/git_workspace/workflow_2021/" + file.getOriginalFilename();
File _file = new File(path);
//上传
file.transferTo(_file);
//发布流程.
InputStream inputStream = new FileInputStream(_file);
ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("GBK"));
this.springProcessEngineConfiguration.getRepositoryService()
.createDeployment()
.name(name)
.category(category)
.addZipInputStream(zipInputStream)
.deploy();
inputStream.close();
zipInputStream.close();
}
} catch (Exception e){
e.printStackTrace();
return 0;
}
return 1;
}
java 解压zip java.lang.IllegalArgumentException: MALFORMED 错误
Mr_Johhny 2017-03-02 17:00:05 47983 收藏 9
分类专栏: 语言编程 Java zip 文章标签: java zip 解压 编码
版权
zip压缩包在解压过程中,遇到了错误,提示如下
java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(Unknown Source)
at java.util.zip.ZipInputStream.readLOC(Unknown Source)
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
at com.yc.utils.TestZip.extZipFileList(TestZip.java:40)
at com.yc.utils.TestZip.main(TestZip.java:21)
查阅网上的资料,有一个说是编码的问题, 看看老外怎么说,参考了一下,确实是编码的问题。附上我的部分解压缩代码
public static void unzip(String zipFilePath, String targetPath)
throws IOException {
OutputStream os = null;
InputStream is = null;
ZipFile zipFile = null;
try {
zipFile = new ZipFile(zipFilePath,Charset.forName("GBK"));
String directoryPath = "";
if (null == targetPath || "".equals(targetPath)) {
directoryPath = zipFilePath.substring(0, zipFilePath
.lastIndexOf("."));
} else {
directoryPath = targetPath;
}
Enumeration<?> entryEnum = zipFile.entries();
if (null != entryEnum) {
ZipEntry zipEntry = null;
while (entryEnum.hasMoreElements()) {
zipEntry = (ZipEntry) entryEnum.nextElement();
if (zipEntry.getSize() > 0) {
// 文件
File targetFile = FileUtil.buildFile(directoryPath
+ File.separator + zipEntry.getName(), false);
os = new BufferedOutputStream(new FileOutputStream(targetFile));
is = zipFile.getInputStream(zipEntry);
byte[] buffer = new byte[4096];
int readLen = 0;
while ((readLen = is.read(buffer, 0, 4096)) >= 0) {
os.write(buffer, 0, readLen);
os.flush();
}
is.close();
os.close();
}
if (zipEntry.isDirectory()) {
String pathTemp = directoryPath + File.separator
+ zipEntry.getName();
File file = new File(pathTemp);
file.mkdirs();
System.out.println(pathTemp);
// continue;
}
}
}
} catch (IOException ex) {
throw ex;
} finally {
if(null != zipFile){
zipFile.close();
zipFile = null;
}
if (null != is) {
is.close();
}
if (null != os) {
os.close();
}
}
}
声明:
zipFile = new ZipFile(zipFilePath,Charset.forName("GBK"));
不是所有压缩包的编码都是GBK,针对不同情况需要特殊处理。