那就校验一下吧wuwuwu
public void zipImport(@RequestParam("file") MultipartFile file) throws IOException {
try (ZipInputStream zis = new ZipInputStream(file.getInputStream,Charset.forName("GBK"))) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
if (entry.isDirectory()) {
throw new SystemRuntimeException(ErrorCode.NORMAL_ERROR_TIPS,"压缩包内不要包含文件夹");
}
zis.closeEntry();
}
zis.close();
}catch (IOException e) {
}
}
小王有问题?
问题1:
上面代码里为什么用Charset.forName("GBK")?
原因:
没用抛了异常java.lang.IllegalArgumentException: MALFORMED
拓展:
Charset.forName("GBK")
是 Java 语言中用于获取 GBK 字符集的方法。
GBK 是汉字内码扩展规范的一种,它是 GB2312 字符集的扩展。GBK 包含了 GB2312 中的所有汉字,并且还收录了繁体中文、日文假名、韩文字母等字符,因此它支持多种语言。
在 Java 中,当需要将字符串编码为 GBK 格式或者从 GBK 格式解码字符串时,可以使用 Charset.forName("GBK")
获取 GBK 字符集,然后使用该字符集进行编码或解码操作。例如:
String str = "中国"; byte[] gbkBytes = str.getBytes(Charset.forName("GBK")); // 将字符串编码为 GBK 格式的字节数组 String gbkStr = new String(gbkBytes, Charset.forName("GBK")); // 将 GBK 格式的字节数组解码为字符串