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

This commit is contained in:
Yurin 2025-01-16 14:20:49 +08:00
parent 633e6a8599
commit 2e468781ce
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); private static final Pattern PATTERN_PATH_ABSOLUTE = Pattern.compile("^[a-zA-Z]:([/\\\\].*)?", Pattern.DOTALL);
/**
* windows的共享文件夹开头
*/
private static final String SMB_PATH_PREFIX = "\\\\";
/** /**
* 是否为Windows环境 * 是否为Windows环境
@ -1370,6 +1374,7 @@ public class FileUtil extends PathUtil {
* <li>/开头的路径</li> * <li>/开头的路径</li>
* <li>满足类似于 c:/xxxxx其中祖母随意不区分大小写</li> * <li>满足类似于 c:/xxxxx其中祖母随意不区分大小写</li>
* <li>满足类似于 d:\xxxxx其中祖母随意不区分大小写</li> * <li>满足类似于 d:\xxxxx其中祖母随意不区分大小写</li>
* <li>满足windows SMB协议格式: \\192.168.254.1\Share</li>
* </ul> * </ul>
* *
* @param path 需要检查的Path * @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下的共享目录路径原始路径如果以\\开头则保留这种路径 //兼容Windows下的共享目录路径原始路径如果以\\开头则保留这种路径
if (path.startsWith("\\\\")) { if (path.startsWith(SMB_PATH_PREFIX)) {
return path; return path;
} }

View File

@ -53,6 +53,30 @@ public class FileUtilTest {
path = FileUtil.getAbsolutePath("d:"); path = FileUtil.getAbsolutePath("d:");
assertEquals("d:", path); 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 @Test