From c134534bf2efb0ddd58a4fc73aba36eb29b853b0 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 4 Sep 2022 21:16:46 +0800 Subject: [PATCH] fix code --- .../java/cn/hutool/extra/ftp/AbstractFtp.java | 37 +++++++++-- .../java/cn/hutool/extra/ftp/FtpTest.java | 61 +++++++++++++++++++ 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/ftp/AbstractFtp.java b/hutool-extra/src/main/java/cn/hutool/extra/ftp/AbstractFtp.java index 616d8132f..245cf0955 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/ftp/AbstractFtp.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/ftp/AbstractFtp.java @@ -2,8 +2,9 @@ package cn.hutool.extra.ftp; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.CharUtil; +import cn.hutool.core.util.CharsetUtil; import java.io.Closeable; import java.io.File; @@ -73,7 +74,12 @@ public abstract class AbstractFtp implements Closeable { * @since 5.7.5 */ public boolean isDir(final String dir) { - return cd(dir); + final String workDir = pwd(); + try { + return cd(dir); + } finally { + cd(workDir); + } } /** @@ -85,14 +91,35 @@ public abstract class AbstractFtp implements Closeable { public abstract boolean mkdir(String dir); /** - * 文件或目录是否存在 + * 文件或目录是否存在
+ * * * @param path 目录 * @return 是否存在 */ public boolean exist(final String path) { + if (StrUtil.isBlank(path)) { + return false; + } + // 目录验证 + if (isDir(path)) { + return true; + } + if (CharUtil.isFileSeparator(path.charAt(path.length() - 1))) { + return false; + } + final String fileName = FileUtil.getName(path); - final String dir = StrUtil.removeSuffix(path, fileName); + if (".".equals(fileName) || "..".equals(fileName)) { + return false; + } + + // 文件验证 + final String dir = StrUtil.defaultIfEmpty(StrUtil.removeSuffix(path, fileName), "."); final List names; try { names = ls(dir); @@ -180,7 +207,7 @@ public abstract class AbstractFtp implements Closeable { /** * 下载文件-避免未完成的文件
- * 来自:https://gitee.com/dromara/hutool/pulls/407
+ * 来自:https://gitee.com/dromara/hutool/pulls/407
* 此方法原理是先在目标文件同级目录下创建临时文件,下载之,等下载完毕后重命名,避免因下载错误导致的文件不完整。 * * @param path 文件路径 diff --git a/hutool-extra/src/test/java/cn/hutool/extra/ftp/FtpTest.java b/hutool-extra/src/test/java/cn/hutool/extra/ftp/FtpTest.java index bd7bebbcb..4e817b4ed 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/ftp/FtpTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/ftp/FtpTest.java @@ -89,5 +89,66 @@ public class FtpTest { name, FileUtil.file("d:/test/download/" + name)); } + + IoUtil.close(ftp); + } + + @Test + @Ignore + public void isDirTest() throws Exception { + try (final Ftp ftp = new Ftp("127.0.0.1", 21)) { + Console.log(ftp.pwd()); + ftp.isDir("/test"); + Console.log(ftp.pwd()); + } + } + + @Test + @Ignore + public void existSftpTest() throws Exception { + try (final Sftp ftp = new Sftp("127.0.0.1", 22, "test", "test")) { + Console.log(ftp.pwd()); + Console.log(ftp.exist(null)); + Console.log(ftp.exist("")); + Console.log(ftp.exist(".")); + Console.log(ftp.exist("..")); + Console.log(ftp.exist("/")); + Console.log(ftp.exist("a")); + Console.log(ftp.exist("/home/test")); + Console.log(ftp.exist("/home/test/")); + Console.log(ftp.exist("/home/test//////")); + Console.log(ftp.exist("/home/test/file1")); + Console.log(ftp.exist("/home/test/file1/")); + Console.log(ftp.exist("///////////")); + Console.log(ftp.exist("./")); + Console.log(ftp.exist("./file1")); + Console.log(ftp.pwd()); + } + } + + @Test + @Ignore + public void existFtpTest() throws Exception { + try (final Ftp ftp = new Ftp("127.0.0.1", 21)) { + Console.log(ftp.pwd()); + Console.log(ftp.exist(null)); + Console.log(ftp.exist("")); + Console.log(ftp.exist(".")); + Console.log(ftp.exist("..")); + Console.log(ftp.exist("/")); + Console.log(ftp.exist("a")); + Console.log(ftp.exist("/test")); + Console.log(ftp.exist("/test/")); + Console.log(ftp.exist("/test//////")); + Console.log(ftp.exist("/test/..")); + Console.log(ftp.exist("/test/.")); + Console.log(ftp.exist("/file1")); + Console.log(ftp.exist("/file1/")); + Console.log(ftp.exist("///////////")); + Console.log(ftp.exist("./")); + Console.log(ftp.exist("./file1")); + Console.log(ftp.exist("./2/3/4/..")); + Console.log(ftp.pwd()); + } } }