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 b81ac8ad2..11f8f29bd 100755 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java @@ -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 { *
  • 以/开头的路径
  • *
  • 满足类似于 c:/xxxxx,其中祖母随意,不区分大小写
  • *
  • 满足类似于 d:\xxxxx,其中祖母随意,不区分大小写
  • + *
  • 满足windows SMB协议格式,如: \\192.168.254.1\Share
  • * * * @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; } diff --git a/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java index 5f1fb6b7e..132c7aec5 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java @@ -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