mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix normalize
This commit is contained in:
parent
a8cc693b18
commit
bee3056844
@ -3,11 +3,12 @@
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
# 5.7.5 (2021-07-10)
|
||||
# 5.7.5 (2021-07-12)
|
||||
|
||||
### 🐣新特性
|
||||
|
||||
### 🐞Bug修复
|
||||
* 【core 】 修复FileUtil.normalize处理上级路径的问题(issue#I3YPEH@Gitee)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
@ -1456,9 +1456,9 @@ public class FileUtil extends PathUtil {
|
||||
}
|
||||
|
||||
List<String> pathList = StrUtil.split(pathToUse, StrUtil.C_SLASH);
|
||||
|
||||
List<String> pathElements = new LinkedList<>();
|
||||
int tops = 0;
|
||||
|
||||
String element;
|
||||
for (int i = pathList.size() - 1; i >= 0; i--) {
|
||||
element = pathList.get(i);
|
||||
@ -1478,6 +1478,15 @@ public class FileUtil extends PathUtil {
|
||||
}
|
||||
}
|
||||
|
||||
// issue#1703@Github
|
||||
if(tops > 0){
|
||||
while (tops-- > 0){
|
||||
//遍历完节点发现还有上级标注(即开头有一个或多个..),补充之
|
||||
// Normal path element found.
|
||||
pathElements.add(0, StrUtil.DOUBLE_DOT);
|
||||
}
|
||||
}
|
||||
|
||||
return prefix + CollUtil.join(pathElements, StrUtil.SLASH);
|
||||
}
|
||||
|
||||
|
@ -147,15 +147,16 @@ public class FileUtilTest {
|
||||
Assert.assertEquals("/bar", FileUtil.normalize("/foo/../bar"));
|
||||
Assert.assertEquals("/bar/", FileUtil.normalize("/foo/../bar/"));
|
||||
Assert.assertEquals("/baz", FileUtil.normalize("/foo/../bar/../baz"));
|
||||
Assert.assertEquals("/", FileUtil.normalize("/../"));
|
||||
Assert.assertEquals("/../", FileUtil.normalize("/../"));
|
||||
Assert.assertEquals("foo", FileUtil.normalize("foo/bar/.."));
|
||||
Assert.assertEquals("bar", FileUtil.normalize("foo/../../bar"));
|
||||
Assert.assertEquals("../bar", FileUtil.normalize("foo/../../bar"));
|
||||
Assert.assertEquals("bar", FileUtil.normalize("foo/../bar"));
|
||||
Assert.assertEquals("/server/bar", FileUtil.normalize("//server/foo/../bar"));
|
||||
Assert.assertEquals("/bar", FileUtil.normalize("//server/../bar"));
|
||||
Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\foo\\..\\bar"));
|
||||
Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\..\\bar"));
|
||||
Assert.assertEquals("bar", FileUtil.normalize("../../bar"));
|
||||
//
|
||||
Assert.assertEquals("C:/../bar", FileUtil.normalize("C:\\..\\bar"));
|
||||
Assert.assertEquals("../../bar", FileUtil.normalize("../../bar"));
|
||||
Assert.assertEquals("C:/bar", FileUtil.normalize("/C:/bar"));
|
||||
Assert.assertEquals("C:", FileUtil.normalize("C:"));
|
||||
Assert.assertEquals("\\/192.168.1.1/Share/", FileUtil.normalize("\\\\192.168.1.1\\Share\\"));
|
||||
@ -184,6 +185,12 @@ public class FileUtilTest {
|
||||
Assert.assertEquals("", FileUtil.normalize("classpath:"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void normalizeClassPathTest2() {
|
||||
Assert.assertEquals("../a/b.csv", FileUtil.normalize("../a/b.csv"));
|
||||
Assert.assertEquals("../../../a/b.csv", FileUtil.normalize("../../../a/b.csv"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doubleNormalizeTest() {
|
||||
String normalize = FileUtil.normalize("/aa/b:/c");
|
||||
|
Loading…
x
Reference in New Issue
Block a user