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