diff --git a/CHANGELOG.md b/CHANGELOG.md
index 08bc0260c..d89819707 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,10 +3,14 @@
-------------------------------------------------------------------------------------------------------------
-# 5.5.5 (2020-12-16)
+# 5.5.5 (2020-12-17)
### 新特性
+* 【core 】 URLUtil.normalize新增重载(pr#233@Gitee)
+* 【core 】 PathUtil增加isSub和toAbsNormal方法
+
### Bug修复
+* 【core 】 FileUtil.isSub相对路径判断问题(pr#1315@Github)
-------------------------------------------------------------------------------------------------------------
# 5.5.4 (2020-12-16)
diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/Base64Encoder.java b/hutool-core/src/main/java/cn/hutool/core/codec/Base64Encoder.java
index 33c2b700b..1df7cefd8 100644
--- a/hutool-core/src/main/java/cn/hutool/core/codec/Base64Encoder.java
+++ b/hutool-core/src/main/java/cn/hutool/core/codec/Base64Encoder.java
@@ -1,10 +1,10 @@
package cn.hutool.core.codec;
-import java.nio.charset.Charset;
-
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
+import java.nio.charset.Charset;
+
/**
* Base64编码
*
@@ -128,11 +128,11 @@ public class Base64Encoder {
/**
* 编码为Base64
- * 如果isMultiLine为true
,则每76个字符一个换行符,否则在一行显示
+ * 如果isMultiLine为{@code true},则每76个字符一个换行符,否则在一行显示
*
* @param arr 被编码的数组
* @param isMultiLine 在76个char之后是CRLF还是EOF
- * @param isUrlSafe 是否使用URL安全字符,一般为false
+ * @param isUrlSafe 是否使用URL安全字符,一般为{@code false}
* @return 编码后的bytes
*/
public static byte[] encode(byte[] arr, boolean isMultiLine, boolean isUrlSafe) {
diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java
index 7b06ca8be..d0b59ab37 100644
--- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java
@@ -3194,7 +3194,7 @@ public class FileUtil extends PathUtil {
public static boolean isSub(File parent, File sub) {
Assert.notNull(parent);
Assert.notNull(sub);
- return sub.toPath().toAbsolutePath().normalize().startsWith(parent.toPath().toAbsolutePath().normalize());
+ return isSub(parent.toPath(), sub.toPath());
}
/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java
index cd737c9be..27dd00888 100644
--- a/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java
@@ -515,4 +515,28 @@ public class PathUtil {
final LinkOption[] options = isFollowLinks ? new LinkOption[0] : new LinkOption[]{LinkOption.NOFOLLOW_LINKS};
return Files.exists(path, options);
}
+
+ /**
+ * 判断给定的目录是否为给定文件或文件夹的子目录
+ *
+ * @param parent 父目录
+ * @param sub 子目录
+ * @return 子目录是否为父目录的子目录
+ * @since 5.5.5
+ */
+ public static boolean isSub(Path parent, Path sub) {
+ return toAbsNormal(sub).startsWith(toAbsNormal(parent));
+ }
+
+ /**
+ * 将Path路径转换为标准的绝对路径
+ *
+ * @param path 文件或目录Path
+ * @return 转换后的Path
+ * @since 5.5.5
+ */
+ public static Path toAbsNormal(Path path){
+ Assert.notNull(path);
+ return path.toAbsolutePath().normalize();
+ }
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java
index 2633b90b4..0026d5353 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java
@@ -662,9 +662,11 @@ public class URLUtil {
/**
* 标准化URL字符串,包括:
*
- *
- * 1. 多个/替换为一个 - *+ *
- * 1. 多个/替换为一个 - *+ *
- * 1. 多个/替换为一个 - *+ *