mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
fix zip bug
This commit is contained in:
parent
7b9c78869b
commit
5ee0a73ebb
@ -15,6 +15,7 @@
|
||||
### Bug修复
|
||||
* 【db 】 修复SqlExecutor.callQuery关闭Statement导致的问题(issue#I16981@Gitee)
|
||||
* 【db 】 修复XmlUtil.xmlToMap中List节点的问题(pr#82@Gitee)
|
||||
* 【core】 修复ZipUtil中对于/结尾路径处理的问题(issue#I16PKP@Gitee)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
@ -485,6 +485,7 @@ public class ZipUtil {
|
||||
outItemFile = FileUtil.file(outFile, zipEntry.getName());
|
||||
if (zipEntry.isDirectory()) {
|
||||
// 目录
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
outItemFile.mkdirs();
|
||||
} else {
|
||||
// 文件
|
||||
@ -900,6 +901,7 @@ public class ZipUtil {
|
||||
addDir(subPath, out);
|
||||
}
|
||||
// 压缩目录下的子文件或目录
|
||||
//noinspection ConstantConditions
|
||||
for (File childFile : files) {
|
||||
zip(childFile, srcRootDir, out, filter);
|
||||
}
|
||||
@ -1034,6 +1036,7 @@ public class ZipUtil {
|
||||
* @param out 输出
|
||||
* @param nowrap true表示兼容Gzip压缩
|
||||
*/
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
private static void inflater(InputStream in, OutputStream out, boolean nowrap) {
|
||||
final InflaterOutputStream ios = (out instanceof InflaterOutputStream) ? (InflaterOutputStream) out : new InflaterOutputStream(out, new Inflater(nowrap));
|
||||
IoUtil.copy(in, ios);
|
||||
@ -1052,6 +1055,7 @@ public class ZipUtil {
|
||||
* @param level 压缩级别,0~9
|
||||
* @param nowrap true表示兼容Gzip压缩
|
||||
*/
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
private static void deflater(InputStream in, OutputStream out, int level, boolean nowrap) {
|
||||
final DeflaterOutputStream ios = (out instanceof DeflaterOutputStream) ? (DeflaterOutputStream) out : new DeflaterOutputStream(out, new Deflater(level, nowrap));
|
||||
IoUtil.copy(in, ios);
|
||||
@ -1071,7 +1075,9 @@ public class ZipUtil {
|
||||
* @since 5.0.5
|
||||
*/
|
||||
private static File buildFile(File outFile, String fileName) {
|
||||
if (false == FileUtil.isWindows() && StrUtil.contains(fileName, CharUtil.SLASH)) {
|
||||
if (false == FileUtil.isWindows()
|
||||
// 检查文件名中是否包含"/",不考虑以"/"结尾的情况
|
||||
&& fileName.lastIndexOf(CharUtil.SLASH, fileName.length() - 2) > 0) {
|
||||
// 在Linux下多层目录创建存在问题,/会被当成文件名的一部分,此处做处理
|
||||
// 使用/拆分路径(zip中无\),级联创建父目录
|
||||
final String[] pathParts = StrUtil.splitToArray(fileName, CharUtil.SLASH);
|
||||
@ -1081,8 +1087,8 @@ public class ZipUtil {
|
||||
}
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
outFile.mkdirs();
|
||||
// 最后一个部分作为文件名
|
||||
fileName = pathParts[pathParts.length -1];
|
||||
// 最后一个部分如果非空,作为文件名
|
||||
fileName = pathParts[pathParts.length - 1];
|
||||
}
|
||||
return FileUtil.file(outFile, fileName);
|
||||
}
|
||||
|
@ -1,11 +1,10 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 字符串工具类单元测试
|
||||
@ -57,6 +56,9 @@ public class StrUtilTest {
|
||||
Assert.assertEquals(5, split.size());
|
||||
// 测试去掉两边空白符是否生效
|
||||
Assert.assertEquals("b", split.get(1));
|
||||
|
||||
final String[] strings = StrUtil.splitToArray("abc/", '/');
|
||||
Assert.assertEquals(2, strings.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
Reference in New Issue
Block a user