diff --git a/CHANGELOG.md b/CHANGELOG.md
index 65d30e6ba..2f1a63c30 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,15 +3,17 @@
-------------------------------------------------------------------------------------------------------------
-# 5.5.9 (2021-02-03)
+# 5.5.9 (2021-02-18)
### 新特性
* 【crypto 】 PemUtil.readPemKey支持EC(pr#1366@Github)
* 【extra 】 Ftp等cd方法增加同步(issue#1397@Github)
+* 【core 】 StrUtil增加endWithAnyIgnoreCase(issue#I37I0B@Gitee)
### Bug修复
* 【json 】 JSONUtil.isJson方法改变trim策略,解决特殊空白符导致判断失败问题
* 【json 】 修复SQLEXception导致的栈溢出(issue#1399@Github)
+* 【extra 】 修复Ftp中异常参数没有传入问题(issue#1397@Github)
-------------------------------------------------------------------------------------------------------------
diff --git a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java
index 552d40397..a594d9e81 100644
--- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java
@@ -839,6 +839,28 @@ public class CharSequenceUtil {
return false;
}
+ /**
+ * 给定字符串是否以任何一个字符串结尾(忽略大小写)
+ * 给定字符串和数组为空都返回false
+ *
+ * @param str 给定字符串
+ * @param suffixes 需要检测的结尾字符串
+ * @return 给定字符串是否以任何一个字符串结尾
+ * @since 5.5.9
+ */
+ public static boolean endWithAnyIgnoreCase(CharSequence str, CharSequence... suffixes) {
+ if (isEmpty(str) || ArrayUtil.isEmpty(suffixes)) {
+ return false;
+ }
+
+ for (CharSequence suffix : suffixes) {
+ if (endWith(str, suffix, true)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
// ------------------------------------------------------------------------ contains
/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/text/StrSpliter.java b/hutool-core/src/main/java/cn/hutool/core/text/StrSpliter.java
index b85eb60bf..2be5e8546 100644
--- a/hutool-core/src/main/java/cn/hutool/core/text/StrSpliter.java
+++ b/hutool-core/src/main/java/cn/hutool/core/text/StrSpliter.java
@@ -12,453 +12,457 @@ import java.util.regex.Pattern;
/**
* 字符串切分器
- * @author Looly
*
+ * @author Looly
*/
public class StrSpliter {
-
+
//---------------------------------------------------------------------------------------------- Split by char
+
/**
* 切分字符串路径,仅支持Unix分界符:/
- *
+ *
* @param str 被切分的字符串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List splitPath(String str){
+ public static List splitPath(String str) {
return splitPath(str, 0);
}
-
+
/**
* 切分字符串路径,仅支持Unix分界符:/
- *
+ *
* @param str 被切分的字符串
* @return 切分后的集合
* @since 3.0.8
*/
- public static String[] splitPathToArray(String str){
+ public static String[] splitPathToArray(String str) {
return toArray(splitPath(str));
}
-
+
/**
* 切分字符串路径,仅支持Unix分界符:/
- *
- * @param str 被切分的字符串
+ *
+ * @param str 被切分的字符串
* @param limit 限制分片数
* @return 切分后的集合
* @since 3.0.8
*/
- public static List splitPath(String str, int limit){
+ public static List splitPath(String str, int limit) {
return split(str, StrUtil.C_SLASH, limit, true, true);
}
-
+
/**
* 切分字符串路径,仅支持Unix分界符:/
- *
- * @param str 被切分的字符串
+ *
+ * @param str 被切分的字符串
* @param limit 限制分片数
* @return 切分后的集合
* @since 3.0.8
*/
- public static String[] splitPathToArray(String str, int limit){
+ public static String[] splitPathToArray(String str, int limit) {
return toArray(splitPath(str, limit));
}
-
+
/**
* 切分字符串
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.2.1
*/
- public static List splitTrim(String str, char separator, boolean ignoreEmpty){
+ public static List splitTrim(String str, char separator, boolean ignoreEmpty) {
return split(str, separator, 0, true, ignoreEmpty);
}
-
+
/**
* 切分字符串
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List split(String str, char separator, boolean isTrim, boolean ignoreEmpty){
+ public static List split(String str, char separator, boolean isTrim, boolean ignoreEmpty) {
return split(str, separator, 0, isTrim, ignoreEmpty);
}
-
+
/**
* 切分字符串,大小写敏感,去除每个元素两边空白符
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
- * @param limit 限制分片数,-1不限制
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
+ * @param limit 限制分片数,-1不限制
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List splitTrim(String str, char separator, int limit, boolean ignoreEmpty){
+ public static List splitTrim(String str, char separator, int limit, boolean ignoreEmpty) {
return split(str, separator, limit, true, ignoreEmpty, false);
}
-
+
/**
* 切分字符串,大小写敏感
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
- * @param limit 限制分片数,-1不限制
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
+ * @param limit 限制分片数,-1不限制
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List split(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static List split(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) {
return split(str, separator, limit, isTrim, ignoreEmpty, false);
}
-
+
/**
* 切分字符串,忽略大小写
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
- * @param limit 限制分片数,-1不限制
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
+ * @param limit 限制分片数,-1不限制
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.2.1
*/
- public static List splitIgnoreCase(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static List splitIgnoreCase(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) {
return split(str, separator, limit, isTrim, ignoreEmpty, true);
}
-
+
/**
* 切分字符串
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
- * @param limit 限制分片数,-1不限制
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
+ * @param limit 限制分片数,-1不限制
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
- * @param ignoreCase 是否忽略大小写
+ * @param ignoreCase 是否忽略大小写
* @return 切分后的集合
* @since 3.2.1
*/
- public static List split(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase){
- if(StrUtil.isEmpty(str)){
+ public static List split(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase) {
+ if (StrUtil.isEmpty(str)) {
return new ArrayList<>(0);
}
- if(limit == 1){
+ if (limit == 1) {
return addToList(new ArrayList<>(1), str, isTrim, ignoreEmpty);
}
-
+
final ArrayList list = new ArrayList<>(limit > 0 ? limit : 16);
int len = str.length();
int start = 0;//切分后每个部分的起始
- for(int i = 0; i < len; i++){
- if(NumberUtil.equals(separator, str.charAt(i), ignoreCase)){
+ for (int i = 0; i < len; i++) {
+ if (NumberUtil.equals(separator, str.charAt(i), ignoreCase)) {
addToList(list, str.substring(start, i), isTrim, ignoreEmpty);
- start = i+1;//i+1同时将start与i保持一致
-
+ start = i + 1;//i+1同时将start与i保持一致
+
//检查是否超出范围(最大允许limit-1个,剩下一个留给末尾字符串)
- if(limit > 0 && list.size() > limit-2){
+ if (limit > 0 && list.size() > limit - 2) {
break;
}
}
}
return addToList(list, str.substring(start, len), isTrim, ignoreEmpty);//收尾
}
-
+
/**
* 切分字符串为字符串数组
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static String[] splitToArray(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static String[] splitToArray(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) {
return toArray(split(str, separator, limit, isTrim, ignoreEmpty));
}
-
+
//---------------------------------------------------------------------------------------------- Split by String
-
+
/**
* 切分字符串,不忽略大小写
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符串
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符串
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List split(String str, String separator, boolean isTrim, boolean ignoreEmpty){
+ public static List split(String str, String separator, boolean isTrim, boolean ignoreEmpty) {
return split(str, separator, -1, isTrim, ignoreEmpty, false);
}
-
+
/**
* 切分字符串,去除每个元素两边空格,忽略大小写
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符串
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符串
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.2.1
*/
- public static List splitTrim(String str, String separator, boolean ignoreEmpty){
+ public static List splitTrim(String str, String separator, boolean ignoreEmpty) {
return split(str, separator, true, ignoreEmpty);
}
-
+
/**
* 切分字符串,不忽略大小写
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符串
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符串
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List split(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static List split(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) {
return split(str, separator, limit, isTrim, ignoreEmpty, false);
}
-
+
/**
* 切分字符串,去除每个元素两边空格,忽略大小写
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符串
- * @param limit 限制分片数
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符串
+ * @param limit 限制分片数
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.2.1
*/
- public static List splitTrim(String str, String separator, int limit, boolean ignoreEmpty){
+ public static List splitTrim(String str, String separator, int limit, boolean ignoreEmpty) {
return split(str, separator, limit, true, ignoreEmpty);
}
-
+
/**
* 切分字符串,忽略大小写
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符串
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符串
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.2.1
*/
- public static List splitIgnoreCase(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static List splitIgnoreCase(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) {
return split(str, separator, limit, isTrim, ignoreEmpty, true);
}
-
+
/**
* 切分字符串,去除每个元素两边空格,忽略大小写
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符串
- * @param limit 限制分片数
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符串
+ * @param limit 限制分片数
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.2.1
*/
- public static List splitTrimIgnoreCase(String str, String separator, int limit, boolean ignoreEmpty){
+ public static List splitTrimIgnoreCase(String str, String separator, int limit, boolean ignoreEmpty) {
return split(str, separator, limit, true, ignoreEmpty, true);
}
-
+
/**
* 切分字符串
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符串
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符串
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
- * @param ignoreCase 是否忽略大小写
+ * @param ignoreCase 是否忽略大小写
* @return 切分后的集合
* @since 3.2.1
*/
- public static List split(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase){
- if(StrUtil.isEmpty(str)){
+ public static List split(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase) {
+ if (StrUtil.isEmpty(str)) {
return new ArrayList<>(0);
}
- if(limit == 1){
+ if (limit == 1) {
return addToList(new ArrayList<>(1), str, isTrim, ignoreEmpty);
}
-
- if(StrUtil.isEmpty(separator)){//分隔符为空时按照空白符切分
+
+ if (StrUtil.isEmpty(separator)) {//分隔符为空时按照空白符切分
return split(str, limit);
- }else if(separator.length() == 1){//分隔符只有一个字符长度时按照单分隔符切分
+ } else if (separator.length() == 1) {//分隔符只有一个字符长度时按照单分隔符切分
return split(str, separator.charAt(0), limit, isTrim, ignoreEmpty, ignoreCase);
}
-
+
final ArrayList list = new ArrayList<>();
int len = str.length();
int separatorLen = separator.length();
int start = 0;
int i = 0;
- while(i < len){
+ while (i < len) {
i = StrUtil.indexOf(str, separator, start, ignoreCase);
- if(i > -1){
+ if (i > -1) {
addToList(list, str.substring(start, i), isTrim, ignoreEmpty);
start = i + separatorLen;
-
+
//检查是否超出范围(最大允许limit-1个,剩下一个留给末尾字符串)
- if(limit > 0 && list.size() > limit-2){
+ if (limit > 0 && list.size() > limit - 2) {
break;
}
- }else{
+ } else {
break;
}
}
return addToList(list, str.substring(start, len), isTrim, ignoreEmpty);
}
-
+
/**
* 切分字符串为字符串数组
- *
- * @param str 被切分的字符串
- * @param separator 分隔符字符
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ *
+ * @param str 被切分的字符串
+ * @param separator 分隔符字符
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
* @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static String[] splitToArray(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static String[] splitToArray(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) {
return toArray(split(str, separator, limit, isTrim, ignoreEmpty));
}
-
+
//---------------------------------------------------------------------------------------------- Split by Whitespace
-
+
/**
* 使用空白符切分字符串
* 切分后的字符串两边不包含空白符,空串或空白符串并不做为元素之一
- *
- * @param str 被切分的字符串
+ *
+ * @param str 被切分的字符串
* @param limit 限制分片数
* @return 切分后的集合
* @since 3.0.8
*/
- public static List split(String str, int limit){
- if(StrUtil.isEmpty(str)){
+ public static List split(String str, int limit) {
+ if (StrUtil.isEmpty(str)) {
return new ArrayList<>(0);
}
- if(limit == 1){
+ if (limit == 1) {
return addToList(new ArrayList<>(1), str, true, true);
}
-
+
final ArrayList list = new ArrayList<>();
int len = str.length();
int start = 0;//切分后每个部分的起始
- for(int i = 0; i < len; i++){
- if(CharUtil.isBlankChar(str.charAt(i))){
+ for (int i = 0; i < len; i++) {
+ if (CharUtil.isBlankChar(str.charAt(i))) {
addToList(list, str.substring(start, i), true, true);
- start = i+1;//i+1同时将start与i保持一致
-
+ start = i + 1;//i+1同时将start与i保持一致
+
//检查是否超出范围(最大允许limit-1个,剩下一个留给末尾字符串)
- if(limit > 0 && list.size() > limit-2){
+ if (limit > 0 && list.size() > limit - 2) {
break;
}
}
}
return addToList(list, str.substring(start, len), true, true);//收尾
}
-
+
/**
* 切分字符串为字符串数组
- *
- * @param str 被切分的字符串
+ *
+ * @param str 被切分的字符串
* @param limit 限制分片数
* @return 切分后的集合
* @since 3.0.8
*/
- public static String[] splitToArray(String str, int limit){
+ public static String[] splitToArray(String str, int limit) {
return toArray(split(str, limit));
}
-
+
//---------------------------------------------------------------------------------------------- Split by regex
+
/**
* 通过正则切分字符串
- * @param str 字符串
+ *
+ * @param str 字符串
* @param separatorRegex 分隔符正则
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
- * @param ignoreEmpty 是否忽略空串
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List splitByRegex(String str, String separatorRegex, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static List splitByRegex(String str, String separatorRegex, int limit, boolean isTrim, boolean ignoreEmpty) {
final Pattern pattern = PatternPool.get(separatorRegex);
return split(str, pattern, limit, isTrim, ignoreEmpty);
}
-
+
/**
* 通过正则切分字符串
- * @param str 字符串
+ *
+ * @param str 字符串
* @param separatorPattern 分隔符正则{@link Pattern}
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
- * @param ignoreEmpty 是否忽略空串
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static List split(String str, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty){
- if(StrUtil.isEmpty(str)){
+ public static List split(String str, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty) {
+ if (StrUtil.isEmpty(str)) {
return new ArrayList<>(0);
}
- if(limit == 1){
+ if (limit == 1) {
return addToList(new ArrayList<>(1), str, isTrim, ignoreEmpty);
}
-
- if(null == separatorPattern){//分隔符为空时按照空白符切分
+
+ if (null == separatorPattern) {//分隔符为空时按照空白符切分
return split(str, limit);
}
-
+
final Matcher matcher = separatorPattern.matcher(str);
final ArrayList list = new ArrayList<>();
int len = str.length();
int start = 0;
- while(matcher.find()){
+ while (matcher.find()) {
addToList(list, str.substring(start, matcher.start()), isTrim, ignoreEmpty);
start = matcher.end();
-
+
//检查是否超出范围(最大允许limit-1个,剩下一个留给末尾字符串)
- if(limit > 0 && list.size() > limit-2){
+ if (limit > 0 && list.size() > limit - 2) {
break;
}
}
return addToList(list, str.substring(start, len), isTrim, ignoreEmpty);
}
-
+
/**
* 通过正则切分字符串为字符串数组
- *
- * @param str 被切分的字符串
+ *
+ * @param str 被切分的字符串
* @param separatorPattern 分隔符正则{@link Pattern}
- * @param limit 限制分片数
- * @param isTrim 是否去除切分字符串后每个元素两边的空格
- * @param ignoreEmpty 是否忽略空串
+ * @param limit 限制分片数
+ * @param isTrim 是否去除切分字符串后每个元素两边的空格
+ * @param ignoreEmpty 是否忽略空串
* @return 切分后的集合
* @since 3.0.8
*/
- public static String[] splitToArray(String str, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty){
+ public static String[] splitToArray(String str, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty) {
return toArray(split(str, separatorPattern, limit, isTrim, ignoreEmpty));
}
-
+
//---------------------------------------------------------------------------------------------- Split by length
-
+
/**
* 根据给定长度,将给定字符串截取为多个部分
- *
+ *
* @param str 字符串
* @param len 每一个小节的长度
* @return 截取后的字符串数组
@@ -481,32 +485,35 @@ public class StrSpliter {
}
return strs;
}
-
+
//---------------------------------------------------------------------------------------------------------- Private method start
+
/**
* 将字符串加入List中
- * @param list 列表
- * @param part 被加入的部分
- * @param isTrim 是否去除两端空白符
+ *
+ * @param list 列表
+ * @param part 被加入的部分
+ * @param isTrim 是否去除两端空白符
* @param ignoreEmpty 是否略过空字符串(空字符串不做为一个元素)
* @return 列表
*/
- private static List addToList(List list, String part, boolean isTrim, boolean ignoreEmpty){
- if(isTrim){
+ private static List addToList(List list, String part, boolean isTrim, boolean ignoreEmpty) {
+ if (isTrim) {
part = StrUtil.trim(part);
}
- if(false == ignoreEmpty || false == part.isEmpty()){
+ if (false == ignoreEmpty || false == part.isEmpty()) {
list.add(part);
}
return list;
}
-
+
/**
* List转Array
+ *
* @param list List
* @return Array
*/
- private static String[] toArray(List list){
+ private static String[] toArray(List list) {
return list.toArray(new String[0]);
}
//---------------------------------------------------------------------------------------------------------- Private method end
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 a26c791a1..93d49343a 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
@@ -82,7 +82,12 @@ public abstract class AbstractFtp implements Closeable {
public boolean exist(String path) {
final String fileName = FileUtil.getName(path);
final String dir = StrUtil.removeSuffix(path, fileName);
- final List names = ls(dir);
+ final List names;
+ try{
+ names = ls(dir);
+ } catch (FtpException ignore){
+ return false;
+ }
return containsIgnoreCase(names, fileName);
}
diff --git a/hutool-extra/src/main/java/cn/hutool/extra/ftp/Ftp.java b/hutool-extra/src/main/java/cn/hutool/extra/ftp/Ftp.java
index 4eaecc82d..60f8e99b1 100644
--- a/hutool-extra/src/main/java/cn/hutool/extra/ftp/Ftp.java
+++ b/hutool-extra/src/main/java/cn/hutool/extra/ftp/Ftp.java
@@ -346,7 +346,7 @@ public class Ftp extends AbstractFtp {
if (StrUtil.isNotBlank(path)) {
pwd = pwd();
if(false == cd(path)){
- throw new FtpException("Change dir to [{}] error, maybe path not exist!");
+ throw new FtpException("Change dir to [{}] error, maybe path not exist!", path);
}
}
@@ -410,7 +410,7 @@ public class Ftp extends AbstractFtp {
final String fileName = FileUtil.getName(path);
final String dir = StrUtil.removeSuffix(path, fileName);
if(false == cd(dir)){
- throw new FtpException("Change dir to [{}] error, maybe dir not exist!");
+ throw new FtpException("Change dir to [{}] error, maybe dir not exist!", path);
}
boolean isSuccess;
@@ -528,7 +528,7 @@ public class Ftp extends AbstractFtp {
if (StrUtil.isNotBlank(path)) {
mkDirs(path);
if (false == cd(path)) {
- throw new FtpException("Change dir to [{}] error, maybe dir not exist!");
+ throw new FtpException("Change dir to [{}] error, maybe dir not exist!", path);
}
}
@@ -636,7 +636,7 @@ public class Ftp extends AbstractFtp {
}
if(false == cd(path)){
- throw new FtpException("Change dir to [{}] error, maybe dir not exist!");
+ throw new FtpException("Change dir to [{}] error, maybe dir not exist!", path);
}
if (null != fileNameCharset) {