From 2e468781ce3119a698e1986f0b96bb6add6d86f7 Mon Sep 17 00:00:00 2001 From: Yurin Date: Thu, 16 Jan 2025 14:20:49 +0800 Subject: [PATCH] =?UTF-8?q?windows=E7=9A=84SMB=E5=8D=8F=E8=AE=AE=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E7=BB=9D=E5=AF=B9=E8=B7=AF=E5=BE=84bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/hutool/core/io/FileUtil.java | 9 +++++-- .../java/cn/hutool/core/io/FileUtilTest.java | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) 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