!1299 windows的SMB协议判断绝对路径bug修复

Merge pull request !1299 from IzayoiYurin/v5-dev
This commit is contained in:
Looly 2025-01-16 19:06:33 +00:00 committed by Gitee
commit 7f91166016
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 31 additions and 2 deletions

View File

@ -64,6 +64,10 @@ public class FileUtil extends PathUtil {
*/
private static final Pattern PATTERN_PATH_ABSOLUTE = Pattern.compile("^[a-zA-Z]:([/\\\\].*)?", Pattern.DOTALL);
/**
* windows的共享文件夹开头
*/
private static final String SMB_PATH_PREFIX = "\\\\";
/**
* 是否为Windows环境
@ -1370,6 +1374,7 @@ public class FileUtil extends PathUtil {
* <li>/开头的路径</li>
* <li>满足类似于 c:/xxxxx其中祖母随意不区分大小写</li>
* <li>满足类似于 d:\xxxxx其中祖母随意不区分大小写</li>
* <li>满足windows SMB协议格式: \\192.168.254.1\Share</li>
* </ul>
*
* @param path 需要检查的Path
@ -1381,7 +1386,7 @@ public class FileUtil extends PathUtil {
}
// 给定的路径已经是绝对路径了
return StrUtil.C_SLASH == path.charAt(0) || ReUtil.isMatch(PATTERN_PATH_ABSOLUTE, path);
return StrUtil.C_SLASH == path.charAt(0) || path.startsWith(SMB_PATH_PREFIX) || ReUtil.isMatch(PATTERN_PATH_ABSOLUTE, path);
}
/**
@ -1667,7 +1672,7 @@ public class FileUtil extends PathUtil {
}
//兼容Windows下的共享目录路径原始路径如果以\\开头则保留这种路径
if (path.startsWith("\\\\")) {
if (path.startsWith(SMB_PATH_PREFIX)) {
return path;
}

View File

@ -53,6 +53,30 @@ public class FileUtilTest {
path = FileUtil.getAbsolutePath("d:");
assertEquals("d:", path);
}
@Test
@Disabled
public void smbPathTest() {
String smbPath = "\\\\192.168.254.88\\share\\rc-source";
String parseSmbPath = FileUtil.getAbsolutePath(smbPath);
assertEquals(smbPath, parseSmbPath);
String dir = smbPath + "\\test";
FileUtil.mkdir(dir);
assertTrue(FileUtil.exist(dir));
String file = dir + "\\a.txt";
FileUtil.touch(file);
FileUtil.writeString("Hello SMB", file, "UTF-8");
String read = FileUtil.readString(file, "UTF-8");
assertEquals(read, "Hello SMB");
assertEquals(1, FileUtil.loopFiles(dir).size());
assertEquals(1, FileUtil.ls(dir).length);
FileUtil.del(dir);
}
@Test