From e58a6055d686552f65ae9e678413ff867ebdc3fc Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 10 Aug 2023 22:03:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DFileUtil=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E8=AF=86=E5=88=ABSmb=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E7=9A=84=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../main/java/cn/hutool/core/io/FileUtil.java | 9 ++-- .../java/cn/hutool/core/io/FileUtilTest.java | 4 +- .../hutool/extra/qrcode/IssueI7RUIVTest.java | 44 +++++++++++++++++++ 4 files changed, 53 insertions(+), 5 deletions(-) create mode 100755 hutool-extra/src/test/java/cn/hutool/extra/qrcode/IssueI7RUIVTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 95dc02fdc..02294376a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * 【core 】 修复PathUtil.moveContent当target不存在时会报错问题(issue#3238@Github) * 【db 】 修复SqlUtil.formatSql 格式化的sql换行异常(pr#3247@Github) * 【core 】 修复DateUtil.parse 给定一个时间解析错误问题(issue#I7QI6R@Gitee) +* 【core 】 修复FileUtil无法正确识别Smb网络存储的路径问题(issue#3253@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.21(2023-07-29) 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 35663d8ee..6b94a4f52 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 @@ -1607,6 +1607,11 @@ public class FileUtil extends PathUtil { return null; } + //兼容Windows下的共享目录路径(原始路径如果以\\开头,则保留这种路径) + if (path.startsWith("\\\\")) { + return path; + } + // 兼容Spring风格的ClassPath路径,去除前缀,不区分大小写 String pathToUse = StrUtil.removePrefixIgnoreCase(path, URLUtil.CLASSPATH_URL_PREFIX); // 去除file:前缀 @@ -1621,10 +1626,6 @@ public class FileUtil extends PathUtil { pathToUse = pathToUse.replaceAll("[/\\\\]+", StrUtil.SLASH); // 去除开头空白符,末尾空白符合法,不去除 pathToUse = StrUtil.trimStart(pathToUse); - //兼容Windows下的共享目录路径(原始路径如果以\\开头,则保留这种路径) - if (path.startsWith("\\\\")) { - pathToUse = "\\" + pathToUse; - } String prefix = StrUtil.EMPTY; int prefixIndex = pathToUse.indexOf(StrUtil.COLON); 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 478501e7c..3725eb842 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 @@ -182,7 +182,9 @@ public class FileUtilTest { Assert.assertEquals("../../bar", FileUtil.normalize("../../bar")); Assert.assertEquals("C:/bar", FileUtil.normalize("/C:/bar")); Assert.assertEquals("C:", FileUtil.normalize("C:")); - Assert.assertEquals("\\/192.168.1.1/Share/", FileUtil.normalize("\\\\192.168.1.1\\Share\\")); + + // issue#3253,smb保留格式 + Assert.assertEquals("\\\\192.168.1.1\\Share\\", FileUtil.normalize("\\\\192.168.1.1\\Share\\")); } @Test diff --git a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/IssueI7RUIVTest.java b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/IssueI7RUIVTest.java new file mode 100755 index 000000000..55e214e45 --- /dev/null +++ b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/IssueI7RUIVTest.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package cn.hutool.extra.qrcode; + +import cn.hutool.core.img.ImgUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Console; +import org.junit.Ignore; +import org.junit.Test; + +import java.awt.Color; +import java.io.File; + +public class IssueI7RUIVTest { + + @Test + @Ignore + public void generateTest() { + final QrConfig config = new QrConfig(300, 300); + + // 设置前景色,既二维码颜色(青色) + config.setForeColor(Color.CYAN); + // 设置背景色(灰色) + config.setBackColor(Color.GRAY); + + // 生成二维码到文件,也可以到流 + final File file = QrCodeUtil.generate("https://hutool.cn/", config, FileUtil.file("d:/test/qrcode.jpg")); + + // 识别二维码 + // decode -> "http://hutool.cn/" + final String decode = QrCodeUtil.decode(ImgUtil.read("d:/test/qrcode.jpg"), true, true); + Console.log("decode info = " + decode); + } +}