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修复
|
### 🐞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> pathList = StrUtil.split(pathToUse, StrUtil.C_SLASH);
|
||||||
|
|
||||||
List<String> pathElements = new LinkedList<>();
|
List<String> pathElements = new LinkedList<>();
|
||||||
int tops = 0;
|
int tops = 0;
|
||||||
|
|
||||||
String element;
|
String element;
|
||||||
for (int i = pathList.size() - 1; i >= 0; i--) {
|
for (int i = pathList.size() - 1; i >= 0; i--) {
|
||||||
element = pathList.get(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);
|
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("/bar/", FileUtil.normalize("/foo/../bar/"));
|
Assert.assertEquals("/bar/", FileUtil.normalize("/foo/../bar/"));
|
||||||
Assert.assertEquals("/baz", FileUtil.normalize("/foo/../bar/../baz"));
|
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("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("bar", FileUtil.normalize("foo/../bar"));
|
||||||
Assert.assertEquals("/server/bar", FileUtil.normalize("//server/foo/../bar"));
|
Assert.assertEquals("/server/bar", FileUtil.normalize("//server/foo/../bar"));
|
||||||
Assert.assertEquals("/bar", FileUtil.normalize("//server/../bar"));
|
Assert.assertEquals("/bar", FileUtil.normalize("//server/../bar"));
|
||||||
Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\foo\\..\\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:/bar", FileUtil.normalize("/C:/bar"));
|
||||||
Assert.assertEquals("C:", FileUtil.normalize("C:"));
|
Assert.assertEquals("C:", FileUtil.normalize("C:"));
|
||||||
Assert.assertEquals("\\/192.168.1.1/Share/", FileUtil.normalize("\\\\192.168.1.1\\Share\\"));
|
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:"));
|
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
|
@Test
|
||||||
public void doubleNormalizeTest() {
|
public void doubleNormalizeTest() {
|
||||||
String normalize = FileUtil.normalize("/aa/b:/c");
|
String normalize = FileUtil.normalize("/aa/b:/c");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user