diff --git a/hutool-core/src/main/java/cn/hutool/core/cache/file/AbstractFileCache.java b/hutool-core/src/main/java/cn/hutool/core/cache/file/AbstractFileCache.java index f8a04d6fd..427b428da 100755 --- a/hutool-core/src/main/java/cn/hutool/core/cache/file/AbstractFileCache.java +++ b/hutool-core/src/main/java/cn/hutool/core/cache/file/AbstractFileCache.java @@ -1,7 +1,7 @@ package cn.hutool.core.cache.file; import cn.hutool.core.cache.Cache; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import java.io.File; diff --git a/hutool-core/src/main/java/cn/hutool/core/classloader/JarClassLoader.java b/hutool-core/src/main/java/cn/hutool/core/classloader/JarClassLoader.java index 435bbac1d..5f0cbd9f0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/classloader/JarClassLoader.java +++ b/hutool-core/src/main/java/cn/hutool/core/classloader/JarClassLoader.java @@ -1,7 +1,7 @@ package cn.hutool.core.classloader; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.net.url.URLUtil; import cn.hutool.core.reflect.MethodUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base62.java b/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base62.java index 481ea51d8..ff9fdc21b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base62.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base62.java @@ -1,6 +1,6 @@ package cn.hutool.core.codec.BaseN; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base64.java b/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base64.java index 9d76558c6..071ffc209 100755 --- a/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base64.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/BaseN/Base64.java @@ -1,6 +1,6 @@ package cn.hutool.core.codec.BaseN; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java b/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java index 3055d8e90..36665ba1a 100755 --- a/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java +++ b/hutool-core/src/main/java/cn/hutool/core/compress/ZipReader.java @@ -1,7 +1,7 @@ package cn.hutool.core.compress; import cn.hutool.core.exceptions.ValidateException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/compress/ZipUtil.java b/hutool-core/src/main/java/cn/hutool/core/compress/ZipUtil.java index 2461e57b6..4d04508f0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/compress/ZipUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/compress/ZipUtil.java @@ -2,7 +2,7 @@ package cn.hutool.core.compress; import cn.hutool.core.collection.iter.EnumerationIter; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java b/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java index e2d39f817..c34dd9e58 100755 --- a/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java +++ b/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java @@ -1,6 +1,6 @@ package cn.hutool.core.compress; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.resource.Resource; diff --git a/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java b/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java index cb3377766..6213e5b87 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java @@ -1,6 +1,6 @@ package cn.hutool.core.date; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; import java.text.NumberFormat; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java b/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java index 615ca4814..2b52deb15 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/CharsetDetector.java @@ -1,6 +1,7 @@ package cn.hutool.core.io; import cn.hutool.core.convert.Convert; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.util.ArrayUtil; import java.io.File; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileMagicNumber.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileMagicNumber.java old mode 100755 new mode 100644 similarity index 65% rename from hutool-core/src/main/java/cn/hutool/core/io/FileMagicNumber.java rename to hutool-core/src/main/java/cn/hutool/core/io/file/FileMagicNumber.java index 61c377ffd..01c22a49a --- a/hutool-core/src/main/java/cn/hutool/core/io/FileMagicNumber.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileMagicNumber.java @@ -1,4 +1,4 @@ -package cn.hutool.core.io; +package cn.hutool.core.io.file; import cn.hutool.core.util.ArrayUtil; @@ -13,25 +13,34 @@ import java.util.Objects; * @since 5.8.12 */ public enum FileMagicNumber { + /** + * 未知类型 + */ UNKNOWN(null, null) { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return false; } }, - //image start--------------------------------------------- + // region ----- image + /** + * jpeg + */ JPEG("image/jpeg", "jpg") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 2 && Objects.equals(bytes[0], (byte) 0xff) && Objects.equals(bytes[1], (byte) 0xd8) && Objects.equals(bytes[2], (byte) 0xff); } }, + /** + * jxr + */ JXR("image/vnd.ms-photo", "jxr") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { //file magic number https://www.iana.org/assignments/media-types/image/jxr return bytes.length > 2 && Objects.equals(bytes[0], (byte) 0x49) @@ -39,10 +48,13 @@ public enum FileMagicNumber { && Objects.equals(bytes[2], (byte) 0xbc); } }, + /** + * apng + */ APNG("image/apng", "apng") { @Override - public boolean match(byte[] bytes) { - boolean b = bytes.length > 8 + public boolean match(final byte[] bytes) { + final boolean b = bytes.length > 8 && Objects.equals(bytes[0], (byte) 0x89) && Objects.equals(bytes[1], (byte) 0x50) && Objects.equals(bytes[2], (byte) 0x4e) @@ -56,10 +68,10 @@ public enum FileMagicNumber { int i = 8; while (i < bytes.length) { try { - int dataLength = new BigInteger(1, Arrays.copyOfRange(bytes, i, i + 4)).intValue(); + final int dataLength = new BigInteger(1, Arrays.copyOfRange(bytes, i, i + 4)).intValue(); i += 4; - byte[] bytes1 = Arrays.copyOfRange(bytes, i, i + 4); - String chunkType = new String(bytes1); + final byte[] bytes1 = Arrays.copyOfRange(bytes, i, i + 4); + final String chunkType = new String(bytes1); i += 4; if (Objects.equals(chunkType, "IDAT") || Objects.equals(chunkType, "IEND")) { return false; @@ -67,7 +79,7 @@ public enum FileMagicNumber { return true; } i += dataLength + 4; - } catch (Exception e) { + } catch (final Exception e) { return false; } } @@ -75,9 +87,12 @@ public enum FileMagicNumber { return false; } }, + /** + * png + */ PNG("image/png", "png") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x89) && Objects.equals(bytes[1], (byte) 0x50) @@ -85,34 +100,43 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x47); } }, + /** + * gif + */ GIF("image/gif", "gif") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 2 && Objects.equals(bytes[0], (byte) 0x47) && Objects.equals(bytes[1], (byte) 0x49) && Objects.equals(bytes[2], (byte) 0x46); } }, + /** + * bmp + */ BMP("image/bmp", "bmp") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 1 && Objects.equals(bytes[0], (byte) 0x42) && Objects.equals(bytes[1], (byte) 0x4d); } }, + /** + * tiff + */ TIFF("image/tiff", "tiff") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 4) { return false; } - boolean flag1 = Objects.equals(bytes[0], (byte) 0x49) + final boolean flag1 = Objects.equals(bytes[0], (byte) 0x49) && Objects.equals(bytes[1], (byte) 0x49) && Objects.equals(bytes[2], (byte) 0x2a) && Objects.equals(bytes[3], (byte) 0x00); - boolean flag2 = (Objects.equals(bytes[0], (byte) 0x4d) + final boolean flag2 = (Objects.equals(bytes[0], (byte) 0x4d) && Objects.equals(bytes[1], (byte) 0x4d) && Objects.equals(bytes[2], (byte) 0x00) && Objects.equals(bytes[3], (byte) 0x2a)); @@ -120,10 +144,12 @@ public enum FileMagicNumber { } }, - + /** + * dwg + */ DWG("image/vnd.dwg", "dwg") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 10 && Objects.equals(bytes[0], (byte) 0x41) && Objects.equals(bytes[1], (byte) 0x43) @@ -131,10 +157,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x30); } }, - + /** + * webp + */ WEBP("image/webp", "webp") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 11 && Objects.equals(bytes[8], (byte) 0x57) && Objects.equals(bytes[9], (byte) 0x45) @@ -142,9 +170,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[11], (byte) 0x50); } }, + /** + * psd + */ PSD("image/vnd.adobe.photoshop", "psd") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x38) && Objects.equals(bytes[1], (byte) 0x42) @@ -152,9 +183,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x53); } }, + /** + * icon + */ ICO("image/x-icon", "ico") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x00) && Objects.equals(bytes[1], (byte) 0x00) @@ -162,9 +196,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x00); } }, + /** + * xcf + */ XCF("image/x-xcf", "xcf") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 9 && Objects.equals(bytes[0], (byte) 0x67) && Objects.equals(bytes[1], (byte) 0x69) @@ -178,13 +215,15 @@ public enum FileMagicNumber { && Objects.equals(bytes[9], (byte) 0x76); } }, - //image end----------------------------------------------- - - //audio start--------------------------------------------- + // endregion + // region ----- audio + /** + * wav + */ WAV("audio/x-wav", "wav") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 11 && Objects.equals(bytes[0], (byte) 0x52) && Objects.equals(bytes[1], (byte) 0x49) @@ -196,9 +235,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[11], (byte) 0x45); } }, + /** + * midi + */ MIDI("audio/midi", "midi") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x4d) && Objects.equals(bytes[1], (byte) 0x54) @@ -206,22 +248,28 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x64); } }, + /** + * mpeg-mp3 + */ MP3("audio/mpeg", "mp3") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 2) { return false; } - boolean flag1 = Objects.equals(bytes[0], (byte) 0x49) && Objects.equals(bytes[1], (byte) 0x44) && Objects.equals(bytes[2], (byte) 0x33); - boolean flag2 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xFB); - boolean flag3 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF3); - boolean flag4 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF2); + final boolean flag1 = Objects.equals(bytes[0], (byte) 0x49) && Objects.equals(bytes[1], (byte) 0x44) && Objects.equals(bytes[2], (byte) 0x33); + final boolean flag2 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xFB); + final boolean flag3 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF3); + final boolean flag4 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF2); return flag1 || flag2 || flag3 || flag4; } }, + /** + * ogg + */ OGG("audio/ogg", "ogg") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x4f) && Objects.equals(bytes[1], (byte) 0x67) @@ -229,9 +277,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x53); } }, + /** + * flac + */ FLAC("audio/x-flac", "flac") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x66) && Objects.equals(bytes[1], (byte) 0x4c) @@ -239,9 +290,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x43); } }, + /** + * mp4 + */ M4A("audio/mp4", "m4a") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return (bytes.length > 10 && Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x74) @@ -256,32 +310,38 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x20)); } }, + /** + * aac + */ AAC("audio/aac", "aac") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 1) { return false; } - boolean flag1 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF1); - boolean flag2 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF9); + final boolean flag1 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF1); + final boolean flag2 = Objects.equals(bytes[0], (byte) 0xFF) && Objects.equals(bytes[1], (byte) 0xF9); return flag1 || flag2; } }, + /** + * amr + */ AMR("audio/amr", "amr") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { //single-channel if (bytes.length < 11) { return false; } - boolean flag1 = Objects.equals(bytes[0], (byte) 0x23) + final boolean flag1 = Objects.equals(bytes[0], (byte) 0x23) && Objects.equals(bytes[1], (byte) 0x21) && Objects.equals(bytes[2], (byte) 0x41) && Objects.equals(bytes[3], (byte) 0x4d) && Objects.equals(bytes[4], (byte) 0x52) && Objects.equals(bytes[5], (byte) 0x0A); //multi-channel: - boolean flag2 = Objects.equals(bytes[0], (byte) 0x23) + final boolean flag2 = Objects.equals(bytes[0], (byte) 0x23) && Objects.equals(bytes[1], (byte) 0x21) && Objects.equals(bytes[2], (byte) 0x41) && Objects.equals(bytes[3], (byte) 0x4d) @@ -296,17 +356,23 @@ public enum FileMagicNumber { return flag1 || flag2; } }, + /** + * ac3 + */ AC3("audio/ac3", "ac3") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 2 && Objects.equals(bytes[0], (byte) 0x0b) && Objects.equals(bytes[1], (byte) 0x77); } }, + /** + * aiff + */ AIFF("audio/x-aiff", "aiff") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 11 && Objects.equals(bytes[0], (byte) 0x46) && Objects.equals(bytes[1], (byte) 0x4f) @@ -318,26 +384,29 @@ public enum FileMagicNumber { && Objects.equals(bytes[11], (byte) 0x46); } }, - //audio end----------------------------------------------- + // endregion - //font start--------------------------------------------- - // The existing registration "application/font-woff" is deprecated in favor of "font/woff". + // region ----- font + /** + * woff
+ * The existing registration "application/font-woff" is deprecated in favor of "font/woff". + */ WOFF("font/woff", "woff") { @Override - public boolean match(byte[] bytes) { - boolean flag1 = Objects.equals(bytes[0], (byte) 0x77) + public boolean match(final byte[] bytes) { + final boolean flag1 = Objects.equals(bytes[0], (byte) 0x77) && Objects.equals(bytes[1], (byte) 0x4f) && Objects.equals(bytes[2], (byte) 0x46) && Objects.equals(bytes[3], (byte) 0x46); - boolean flag2 = Objects.equals(bytes[4], (byte) 0x00) + final boolean flag2 = Objects.equals(bytes[4], (byte) 0x00) && Objects.equals(bytes[5], (byte) 0x01) && Objects.equals(bytes[6], (byte) 0x00) && Objects.equals(bytes[7], (byte) 0x00); - boolean flag3 = Objects.equals(bytes[4], (byte) 0x4f) + final boolean flag3 = Objects.equals(bytes[4], (byte) 0x4f) && Objects.equals(bytes[5], (byte) 0x54) && Objects.equals(bytes[6], (byte) 0x54) && Objects.equals(bytes[7], (byte) 0x4f); - boolean flag4 = Objects.equals(bytes[4], (byte) 0x74) + final boolean flag4 = Objects.equals(bytes[4], (byte) 0x74) && Objects.equals(bytes[5], (byte) 0x72) && Objects.equals(bytes[6], (byte) 0x75) && Objects.equals(bytes[7], (byte) 0x65); @@ -345,22 +414,25 @@ public enum FileMagicNumber { && (flag1 && (flag2 || flag3 || flag4)); } }, + /** + * woff2 + */ WOFF2("font/woff2", "woff2") { @Override - public boolean match(byte[] bytes) { - boolean flag1 = Objects.equals(bytes[0], (byte) 0x77) + public boolean match(final byte[] bytes) { + final boolean flag1 = Objects.equals(bytes[0], (byte) 0x77) && Objects.equals(bytes[1], (byte) 0x4f) && Objects.equals(bytes[2], (byte) 0x46) && Objects.equals(bytes[3], (byte) 0x32); - boolean flag2 = Objects.equals(bytes[4], (byte) 0x00) + final boolean flag2 = Objects.equals(bytes[4], (byte) 0x00) && Objects.equals(bytes[5], (byte) 0x01) && Objects.equals(bytes[6], (byte) 0x00) && Objects.equals(bytes[7], (byte) 0x00); - boolean flag3 = Objects.equals(bytes[4], (byte) 0x4f) + final boolean flag3 = Objects.equals(bytes[4], (byte) 0x4f) && Objects.equals(bytes[5], (byte) 0x54) && Objects.equals(bytes[6], (byte) 0x54) && Objects.equals(bytes[7], (byte) 0x4f); - boolean flag4 = Objects.equals(bytes[4], (byte) 0x74) + final boolean flag4 = Objects.equals(bytes[4], (byte) 0x74) && Objects.equals(bytes[5], (byte) 0x72) && Objects.equals(bytes[6], (byte) 0x75) && Objects.equals(bytes[7], (byte) 0x65); @@ -368,9 +440,12 @@ public enum FileMagicNumber { && (flag1 && (flag2 || flag3 || flag4)); } }, + /** + * ttf + */ TTF("font/ttf", "ttf") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 4 && Objects.equals(bytes[0], (byte) 0x00) && Objects.equals(bytes[1], (byte) 0x01) @@ -379,9 +454,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[4], (byte) 0x00); } }, + /** + * otf + */ OTF("font/otf", "otf") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 4 && Objects.equals(bytes[0], (byte) 0x4f) && Objects.equals(bytes[1], (byte) 0x54) @@ -390,13 +468,15 @@ public enum FileMagicNumber { && Objects.equals(bytes[4], (byte) 0x00); } }, + // endregion - //font end----------------------------------------------- - - //archive start----------------------------------------- + // region ----- archive + /** + * epub + */ EPUB("application/epub+zip", "epub") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 58 && Objects.equals(bytes[0], (byte) 0x50) && Objects.equals(bytes[1], (byte) 0x4b) && Objects.equals(bytes[2], (byte) 0x03) && Objects.equals(bytes[3], (byte) 0x04) @@ -416,21 +496,27 @@ public enum FileMagicNumber { && Objects.equals(bytes[56], (byte) 0x69) && Objects.equals(bytes[57], (byte) 0x70); } }, + /** + * zip + */ ZIP("application/zip", "zip") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 4) { return false; } - boolean flag1 = Objects.equals(bytes[0], (byte) 0x50) && Objects.equals(bytes[1], (byte) 0x4b); - boolean flag2 = Objects.equals(bytes[2], (byte) 0x03) || Objects.equals(bytes[2], (byte) 0x05) || Objects.equals(bytes[2], (byte) 0x07); - boolean flag3 = Objects.equals(bytes[3], (byte) 0x04) || Objects.equals(bytes[3], (byte) 0x06) || Objects.equals(bytes[3], (byte) 0x08); + final boolean flag1 = Objects.equals(bytes[0], (byte) 0x50) && Objects.equals(bytes[1], (byte) 0x4b); + final boolean flag2 = Objects.equals(bytes[2], (byte) 0x03) || Objects.equals(bytes[2], (byte) 0x05) || Objects.equals(bytes[2], (byte) 0x07); + final boolean flag3 = Objects.equals(bytes[3], (byte) 0x04) || Objects.equals(bytes[3], (byte) 0x06) || Objects.equals(bytes[3], (byte) 0x08); return flag1 && flag2 && flag3; } }, + /** + * tar + */ TAR("application/x-tar", "tar") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 261 && Objects.equals(bytes[257], (byte) 0x75) && Objects.equals(bytes[258], (byte) 0x73) @@ -439,9 +525,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[261], (byte) 0x72); } }, + /** + * rar + */ RAR("application/x-rar-compressed", "rar") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 6 && Objects.equals(bytes[0], (byte) 0x52) && Objects.equals(bytes[1], (byte) 0x61) @@ -452,27 +541,36 @@ public enum FileMagicNumber { && (Objects.equals(bytes[6], (byte) 0x00) || Objects.equals(bytes[6], (byte) 0x01)); } }, + /** + * gz + */ GZ("application/gzip", "gz") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 2 && Objects.equals(bytes[0], (byte) 0x1f) && Objects.equals(bytes[1], (byte) 0x8b) && Objects.equals(bytes[2], (byte) 0x08); } }, + /** + * bz2 + */ BZ2("application/x-bzip2", "bz2") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 2 && Objects.equals(bytes[0], (byte) 0x42) && Objects.equals(bytes[1], (byte) 0x5a) && Objects.equals(bytes[2], (byte) 0x68); } }, + /** + * 7z + */ SevenZ("application/x-7z-compressed", "7z") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 6 && Objects.equals(bytes[0], (byte) 0x37) && Objects.equals(bytes[1], (byte) 0x7a) @@ -483,6 +581,9 @@ public enum FileMagicNumber { && Objects.equals(bytes[6], (byte) 0x00); } }, + /** + * pdf + */ PDF("application/pdf", "pdf") { @Override public boolean match(byte[] bytes) { @@ -498,26 +599,35 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x46); } }, + /** + * exe + */ EXE("application/x-msdownload", "exe") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 1 && Objects.equals(bytes[0], (byte) 0x4d) && Objects.equals(bytes[1], (byte) 0x5a); } }, + /** + * swf + */ SWF("application/x-shockwave-flash", "swf") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 2 && (Objects.equals(bytes[0], 0x43) || Objects.equals(bytes[0], (byte) 0x46)) && Objects.equals(bytes[1], (byte) 0x57) && Objects.equals(bytes[2], (byte) 0x53); } }, + /** + * rtf + */ RTF("application/rtf", "rtf") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 4 && Objects.equals(bytes[0], (byte) 0x7b) && Objects.equals(bytes[1], (byte) 0x5c) @@ -526,9 +636,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[4], (byte) 0x66); } }, + /** + * nes + */ NES("application/x-nintendo-nes-rom", "nes") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x4e) && Objects.equals(bytes[1], (byte) 0x45) @@ -536,9 +649,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x1a); } }, + /** + * crx + */ CRX("application/x-google-chrome-extension", "crx") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x43) && Objects.equals(bytes[1], (byte) 0x72) @@ -546,30 +662,39 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x34); } }, + /** + * cab + */ CAB("application/vnd.ms-cab-compressed", "cab") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 4) { return false; } - boolean flag1 = Objects.equals(bytes[0], (byte) 0x4d) && Objects.equals(bytes[1], (byte) 0x53) + final boolean flag1 = Objects.equals(bytes[0], (byte) 0x4d) && Objects.equals(bytes[1], (byte) 0x53) && Objects.equals(bytes[2], (byte) 0x43) && Objects.equals(bytes[3], (byte) 0x46); - boolean flag2 = Objects.equals(bytes[0], (byte) 0x49) && Objects.equals(bytes[1], (byte) 0x53) + final boolean flag2 = Objects.equals(bytes[0], (byte) 0x49) && Objects.equals(bytes[1], (byte) 0x53) && Objects.equals(bytes[2], (byte) 0x63) && Objects.equals(bytes[3], (byte) 0x28); return flag1 || flag2; } }, + /** + * ps + */ PS("application/postscript", "ps") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 1 && Objects.equals(bytes[0], (byte) 0x25) && Objects.equals(bytes[1], (byte) 0x21); } }, + /** + * xz + */ XZ("application/x-xz", "xz") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 5 && Objects.equals(bytes[0], (byte) 0xFD) && Objects.equals(bytes[1], (byte) 0x37) @@ -579,9 +704,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[5], (byte) 0x00); } }, + /** + * sqlite + */ SQLITE("application/x-sqlite3", "sqlite") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 15 && Objects.equals(bytes[0], (byte) 0x53) && Objects.equals(bytes[1], (byte) 0x51) && Objects.equals(bytes[2], (byte) 0x4c) && Objects.equals(bytes[3], (byte) 0x69) @@ -593,9 +721,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[14], (byte) 0x33) && Objects.equals(bytes[15], (byte) 0x00); } }, + /** + * deb + */ DEB("application/x-deb", "deb") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 20 && Objects.equals(bytes[0], (byte) 0x21) && Objects.equals(bytes[1], (byte) 0x3c) && Objects.equals(bytes[2], (byte) 0x61) && Objects.equals(bytes[3], (byte) 0x72) @@ -610,9 +741,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[20], (byte) 0x79); } }, + /** + * ar + */ AR("application/x-unix-archive", "ar") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 6 && Objects.equals(bytes[0], (byte) 0x21) && Objects.equals(bytes[1], (byte) 0x3c) @@ -623,9 +757,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[6], (byte) 0x3e); } }, + /** + * lzo + */ LZOP("application/x-lzop", "lzo") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 7 && Objects.equals(bytes[0], (byte) 0x89) && Objects.equals(bytes[1], (byte) 0x4c) @@ -637,9 +774,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[7], (byte) 0x1a); } }, + /** + * lz + */ LZ("application/x-lzip", "lz") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x4c) && Objects.equals(bytes[1], (byte) 0x5a) @@ -647,9 +787,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x50); } }, + /** + * elf + */ ELF("application/x-executable", "elf") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 52 && Objects.equals(bytes[0], (byte) 0x7f) && Objects.equals(bytes[1], (byte) 0x45) @@ -657,9 +800,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x46); } }, + /** + * lz4 + */ LZ4("application/x-lz4", "lz4") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 4 && Objects.equals(bytes[0], (byte) 0x04) && Objects.equals(bytes[1], (byte) 0x22) @@ -667,10 +813,13 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x18); } }, - //https://github.com/madler/brotli/blob/master/br-format-v3.txt,brotli 没有固定的file magic number,所以此处只是参考 + /** + * br
+ * https://github.com/madler/brotli/blob/master/br-format-v3.txt,brotli 没有固定的file magic number,所以此处只是参考 + */ BR("application/x-brotli", "br") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0xce) && Objects.equals(bytes[1], (byte) 0xb2) @@ -678,9 +827,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x81); } }, + /** + * dcm + */ DCM("application/x-dicom", "dcm") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 128 && Objects.equals(bytes[128], (byte) 0x44) && Objects.equals(bytes[129], (byte) 0x49) @@ -688,9 +840,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[131], (byte) 0x4d); } }, + /** + * rpm + */ RPM("application/x-rpm", "rpm") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 4 && Objects.equals(bytes[0], (byte) 0xed) && Objects.equals(bytes[1], (byte) 0xab) @@ -698,15 +853,18 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0xdb); } }, + /** + * zst + */ ZSTD("application/x-zstd", "zst") { @Override - public boolean match(byte[] bytes) { - int length = bytes.length; + public boolean match(final byte[] bytes) { + final int length = bytes.length; if (length < 5) { return false; } - byte[] buf1 = new byte[]{(byte) 0x22, (byte) 0x23, (byte) 0x24, (byte) 0x25, (byte) 0x26, (byte) 0x27, (byte) 0x28}; - boolean flag1 = ArrayUtil.contains(buf1, bytes[0]) + final byte[] buf1 = new byte[]{(byte) 0x22, (byte) 0x23, (byte) 0x24, (byte) 0x25, (byte) 0x26, (byte) 0x27, (byte) 0x28}; + final boolean flag1 = ArrayUtil.contains(buf1, bytes[0]) && Objects.equals(bytes[1], (byte) 0xb5) && Objects.equals(bytes[2], (byte) 0x2f) && Objects.equals(bytes[3], (byte) 0xfd); @@ -719,15 +877,19 @@ public enum FileMagicNumber { return false; } }, - //archive end------------------------------------------------------------ - //video start------------------------------------------------------------ + // endregion + + // region ----- video + /** + * mp4 + */ MP4("video/mp4", "mp4") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 13) { return false; } - boolean flag1 = Objects.equals(bytes[4], (byte) 0x66) + final boolean flag1 = Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x74) && Objects.equals(bytes[6], (byte) 0x79) && Objects.equals(bytes[7], (byte) 0x70) @@ -735,7 +897,7 @@ public enum FileMagicNumber { && Objects.equals(bytes[9], (byte) 0x53) && Objects.equals(bytes[10], (byte) 0x4e) && Objects.equals(bytes[11], (byte) 0x56); - boolean flag2 = Objects.equals(bytes[4], (byte) 0x66) + final boolean flag2 = Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x74) && Objects.equals(bytes[6], (byte) 0x79) && Objects.equals(bytes[7], (byte) 0x70) @@ -746,9 +908,12 @@ public enum FileMagicNumber { return flag1 || flag2; } }, + /** + * avi + */ AVI("video/x-msvideo", "avi") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 11 && Objects.equals(bytes[0], (byte) 0x52) && Objects.equals(bytes[1], (byte) 0x49) @@ -760,9 +925,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[11], (byte) 0x20); } }, + /** + * wmv + */ WMV("video/x-ms-wmv", "wmv") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 9 && Objects.equals(bytes[0], (byte) 0x30) && Objects.equals(bytes[1], (byte) 0x26) @@ -776,13 +944,16 @@ public enum FileMagicNumber { && Objects.equals(bytes[9], (byte) 0xd9); } }, + /** + * m4v + */ M4V("video/x-m4v", "m4v") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 12) { return false; } - boolean flag1 = Objects.equals(bytes[4], (byte) 0x66) + final boolean flag1 = Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x74) && Objects.equals(bytes[6], (byte) 0x79) && Objects.equals(bytes[7], (byte) 0x70) @@ -790,7 +961,7 @@ public enum FileMagicNumber { && Objects.equals(bytes[9], (byte) 0x34) && Objects.equals(bytes[10], (byte) 0x56) && Objects.equals(bytes[11], (byte) 0x20); - boolean flag2 = Objects.equals(bytes[4], (byte) 0x66) + final boolean flag2 = Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x74) && Objects.equals(bytes[6], (byte) 0x79) && Objects.equals(bytes[7], (byte) 0x70) @@ -801,9 +972,12 @@ public enum FileMagicNumber { return flag1 || flag2; } }, + /** + * flv + */ FLV("video/x-flv", "flv") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x46) && Objects.equals(bytes[1], (byte) 0x4c) @@ -811,11 +985,14 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x01); } }, + /** + * mkv + */ MKV("video/x-matroska", "mkv") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { //0x42 0x82 0x88 0x6d 0x61 0x74 0x72 0x6f 0x73 0x6b 0x61 - boolean flag1 = bytes.length > 11 + final boolean flag1 = bytes.length > 11 && Objects.equals(bytes[0], (byte) 0x1a) && Objects.equals(bytes[1], (byte) 0x45) && Objects.equals(bytes[2], (byte) 0xdf) @@ -823,39 +1000,44 @@ public enum FileMagicNumber { if (flag1) { //此处需要判断是否是'\x42\x82\x88matroska',算法类似kmp判断 - byte[] bytes1 = {(byte) 0x42, (byte) 0x82, (byte) 0x88, (byte) 0x6d, (byte) 0x61, (byte) 0x74, (byte) 0x72, (byte) 0x6f, (byte) 0x73, (byte) 0x6b, (byte) 0x61}; - int index = FileMagicNumber.indexOf(bytes, bytes1); + final byte[] bytes1 = {(byte) 0x42, (byte) 0x82, (byte) 0x88, (byte) 0x6d, (byte) 0x61, (byte) 0x74, (byte) 0x72, (byte) 0x6f, (byte) 0x73, (byte) 0x6b, (byte) 0x61}; + final int index = FileMagicNumber.indexOf(bytes, bytes1); return index > 0; } return false; } }, - + /** + * webm + */ WEBM("video/webm", "webm") { @Override - public boolean match(byte[] bytes) { - boolean flag1 = bytes.length > 8 + public boolean match(final byte[] bytes) { + final boolean flag1 = bytes.length > 8 && Objects.equals(bytes[0], (byte) 0x1a) && Objects.equals(bytes[1], (byte) 0x45) && Objects.equals(bytes[2], (byte) 0xdf) && Objects.equals(bytes[3], (byte) 0xa3); if (flag1) { //此处需要判断是否是'\x42\x82\x88webm',算法类似kmp判断 - byte[] bytes1 = {(byte) 0x42, (byte) 0x82, (byte) 0x88, (byte) 0x77, (byte) 0x65, (byte) 0x62, (byte) 0x6d}; - int index = FileMagicNumber.indexOf(bytes, bytes1); + final byte[] bytes1 = {(byte) 0x42, (byte) 0x82, (byte) 0x88, (byte) 0x77, (byte) 0x65, (byte) 0x62, (byte) 0x6d}; + final int index = FileMagicNumber.indexOf(bytes, bytes1); return index > 0; } return false; } }, - //此文件签名非常复杂,只判断常见的几种 + /** + * mov
+ * 此文件签名非常复杂,只判断常见的几种 + */ MOV("video/quicktime", "mov") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 12) { return false; } - boolean flag1 = Objects.equals(bytes[4], (byte) 0x66) + final boolean flag1 = Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x74) && Objects.equals(bytes[6], (byte) 0x79) && Objects.equals(bytes[7], (byte) 0x70) @@ -863,36 +1045,39 @@ public enum FileMagicNumber { && Objects.equals(bytes[9], (byte) 0x74) && Objects.equals(bytes[10], (byte) 0x20) && Objects.equals(bytes[11], (byte) 0x20); - boolean flag2 = Objects.equals(bytes[4], (byte) 0x6D) + final boolean flag2 = Objects.equals(bytes[4], (byte) 0x6D) && Objects.equals(bytes[5], (byte) 0x6F) && Objects.equals(bytes[6], (byte) 0x6F) && Objects.equals(bytes[7], (byte) 0x76); - boolean flag3 = Objects.equals(bytes[4], (byte) 0x66) + final boolean flag3 = Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x72) && Objects.equals(bytes[6], (byte) 0x65) && Objects.equals(bytes[7], (byte) 0x65); - boolean flag4 = Objects.equals(bytes[4], (byte) 0x6D) + final boolean flag4 = Objects.equals(bytes[4], (byte) 0x6D) && Objects.equals(bytes[5], (byte) 0x64) && Objects.equals(bytes[6], (byte) 0x61) && Objects.equals(bytes[7], (byte) 0x74); - boolean flag5 = Objects.equals(bytes[4], (byte) 0x77) + final boolean flag5 = Objects.equals(bytes[4], (byte) 0x77) && Objects.equals(bytes[5], (byte) 0x69) && Objects.equals(bytes[6], (byte) 0x64) && Objects.equals(bytes[7], (byte) 0x65); - boolean flag6 = Objects.equals(bytes[4], (byte) 0x70) + final boolean flag6 = Objects.equals(bytes[4], (byte) 0x70) && Objects.equals(bytes[5], (byte) 0x6E) && Objects.equals(bytes[6], (byte) 0x6F) && Objects.equals(bytes[7], (byte) 0x74); - boolean flag7 = Objects.equals(bytes[4], (byte) 0x73) + final boolean flag7 = Objects.equals(bytes[4], (byte) 0x73) && Objects.equals(bytes[5], (byte) 0x6B) && Objects.equals(bytes[6], (byte) 0x69) && Objects.equals(bytes[7], (byte) 0x70); return flag1 || flag2 || flag3 || flag4 || flag5 || flag6 || flag7; } }, + /** + * mpg + */ MPEG("video/mpeg", "mpg") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 3 && Objects.equals(bytes[0], (byte) 0x00) && Objects.equals(bytes[1], (byte) 0x00) @@ -900,9 +1085,12 @@ public enum FileMagicNumber { && (bytes[3] >= (byte) 0xb0 && bytes[3] <= (byte) 0xbf); } }, + /** + * rmvb + */ RMVB("video/vnd.rn-realvideo", "rmvb") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 4 && Objects.equals(bytes[0], (byte) 0x2E) && Objects.equals(bytes[1], (byte) 0x52) @@ -910,9 +1098,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[3], (byte) 0x46); } }, + /** + * 3gp + */ M3GP("video/3gpp", "3gp") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 10 && Objects.equals(bytes[4], (byte) 0x66) && Objects.equals(bytes[5], (byte) 0x74) @@ -923,94 +1114,115 @@ public enum FileMagicNumber { && Objects.equals(bytes[10], (byte) 0x70); } }, - //video end --------------------------------------------------------------- - //document start ---------------------------------------------------------- + // endregion + + // region ----- document + /** + * doc + */ DOC("application/msword", "doc") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0xd0, (byte) 0xcf, (byte) 0x11, (byte) 0xe0, (byte) 0xa1, (byte) 0xb1, (byte) 0x1a, (byte) 0xe1}; - boolean flag1 = bytes.length > 515 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte1); + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0xd0, (byte) 0xcf, (byte) 0x11, (byte) 0xe0, (byte) 0xa1, (byte) 0xb1, (byte) 0x1a, (byte) 0xe1}; + final boolean flag1 = bytes.length > 515 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte1); if (flag1) { - byte[] byte2 = new byte[]{(byte) 0xec, (byte) 0xa5, (byte) 0xc1, (byte) 0x00}; - boolean flag2 = Arrays.equals(Arrays.copyOfRange(bytes, 512, 516), byte2); - byte[] byte3 = new byte[]{(byte) 0x00, (byte) 0x0a, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4d, (byte) 0x53, (byte) 0x57, (byte) 0x6f, (byte) 0x72, (byte) 0x64 + final byte[] byte2 = new byte[]{(byte) 0xec, (byte) 0xa5, (byte) 0xc1, (byte) 0x00}; + final boolean flag2 = Arrays.equals(Arrays.copyOfRange(bytes, 512, 516), byte2); + final byte[] byte3 = new byte[]{(byte) 0x00, (byte) 0x0a, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4d, (byte) 0x53, (byte) 0x57, (byte) 0x6f, (byte) 0x72, (byte) 0x64 , (byte) 0x44, (byte) 0x6f, (byte) 0x63, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x57, (byte) 0x6f, (byte) 0x72, (byte) 0x64, (byte) 0x2e, (byte) 0x44, (byte) 0x6f, (byte) 0x63, (byte) 0x75, (byte) 0x6d, (byte) 0x65, (byte) 0x6e, (byte) 0x74, (byte) 0x2e, (byte) 0x38, (byte) 0x00, (byte) 0xf4, (byte) 0x39, (byte) 0xb2, (byte) 0x71}; - byte[] range = Arrays.copyOfRange(bytes, 2075, 2142); - boolean flag3 = bytes.length > 2142 && FileMagicNumber.indexOf(range, byte3) > 0; + final byte[] range = Arrays.copyOfRange(bytes, 2075, 2142); + final boolean flag3 = bytes.length > 2142 && FileMagicNumber.indexOf(range, byte3) > 0; return flag2 || flag3; } return false; } }, - + /** + * xls + */ XLS("application/vnd.ms-excel", "xls") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0xd0, (byte) 0xcf, (byte) 0x11, (byte) 0xe0, (byte) 0xa1, (byte) 0xb1, (byte) 0x1a, (byte) 0xe1}; - boolean flag1 = bytes.length > 520 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte1); + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0xd0, (byte) 0xcf, (byte) 0x11, (byte) 0xe0, (byte) 0xa1, (byte) 0xb1, (byte) 0x1a, (byte) 0xe1}; + final boolean flag1 = bytes.length > 520 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte1); if (flag1) { - byte[] byte2 = new byte[]{(byte) 0xfd, (byte) 0xff, (byte) 0xff, (byte) 0xff}; - boolean flag2 = Arrays.equals(Arrays.copyOfRange(bytes, 512, 516), byte2) && (bytes[518] == 0x00 || bytes[518] == 0x02); - byte[] byte3 = new byte[]{(byte) 0x09, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x05, (byte) 0x00}; - boolean flag3 = Arrays.equals(Arrays.copyOfRange(bytes, 512, 520), byte3); - byte[] byte4 = new byte[]{(byte) 0xe2, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x5c, (byte) 0x00, (byte) 0x70, (byte) 0x00, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x43, (byte) 0x61, (byte) 0x6c, (byte) 0x63}; - boolean flag4 = bytes.length > 2095 && Arrays.equals(Arrays.copyOfRange(bytes, 1568, 2095), byte4); + final byte[] byte2 = new byte[]{(byte) 0xfd, (byte) 0xff, (byte) 0xff, (byte) 0xff}; + final boolean flag2 = Arrays.equals(Arrays.copyOfRange(bytes, 512, 516), byte2) && (bytes[518] == 0x00 || bytes[518] == 0x02); + final byte[] byte3 = new byte[]{(byte) 0x09, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x05, (byte) 0x00}; + final boolean flag3 = Arrays.equals(Arrays.copyOfRange(bytes, 512, 520), byte3); + final byte[] byte4 = new byte[]{(byte) 0xe2, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x5c, (byte) 0x00, (byte) 0x70, (byte) 0x00, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x43, (byte) 0x61, (byte) 0x6c, (byte) 0x63}; + final boolean flag4 = bytes.length > 2095 && Arrays.equals(Arrays.copyOfRange(bytes, 1568, 2095), byte4); return flag2 || flag3 || flag4; } return false; } }, + /** + * ppt + */ PPT("application/vnd.ms-powerpoint", "ppt") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0xd0, (byte) 0xcf, (byte) 0x11, (byte) 0xe0, (byte) 0xa1, (byte) 0xb1, (byte) 0x1a, (byte) 0xe1}; - boolean flag1 = bytes.length > 524 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte1); + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0xd0, (byte) 0xcf, (byte) 0x11, (byte) 0xe0, (byte) 0xa1, (byte) 0xb1, (byte) 0x1a, (byte) 0xe1}; + final boolean flag1 = bytes.length > 524 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte1); if (flag1) { - byte[] byte2 = new byte[]{(byte) 0xa0, (byte) 0x46, (byte) 0x1d, (byte) 0xf0}; - byte[] byteRange = Arrays.copyOfRange(bytes, 512, 516); - boolean flag2 = Arrays.equals(byteRange, byte2); - byte[] byte3 = new byte[]{(byte) 0x00, (byte) 0x6e, (byte) 0x1e, (byte) 0xf0}; - boolean flag3 = Arrays.equals(byteRange, byte3); - byte[] byte4 = new byte[]{(byte) 0x0f, (byte) 0x00, (byte) 0xe8, (byte) 0x03}; - boolean flag4 = Arrays.equals(byteRange, byte4); - byte[] byte5 = new byte[]{(byte) 0xfd, (byte) 0xff, (byte) 0xff, (byte) 0xff}; - boolean flag5 = Arrays.equals(byteRange, byte5) && bytes[522] == 0x00 && bytes[523] == 0x00; - byte[] byte6 = new byte[]{(byte) 0x00, (byte) 0xb9, (byte) 0x29, (byte) 0xe8, (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, + final byte[] byte2 = new byte[]{(byte) 0xa0, (byte) 0x46, (byte) 0x1d, (byte) 0xf0}; + final byte[] byteRange = Arrays.copyOfRange(bytes, 512, 516); + final boolean flag2 = Arrays.equals(byteRange, byte2); + final byte[] byte3 = new byte[]{(byte) 0x00, (byte) 0x6e, (byte) 0x1e, (byte) 0xf0}; + final boolean flag3 = Arrays.equals(byteRange, byte3); + final byte[] byte4 = new byte[]{(byte) 0x0f, (byte) 0x00, (byte) 0xe8, (byte) 0x03}; + final boolean flag4 = Arrays.equals(byteRange, byte4); + final byte[] byte5 = new byte[]{(byte) 0xfd, (byte) 0xff, (byte) 0xff, (byte) 0xff}; + final boolean flag5 = Arrays.equals(byteRange, byte5) && bytes[522] == 0x00 && bytes[523] == 0x00; + final byte[] byte6 = new byte[]{(byte) 0x00, (byte) 0xb9, (byte) 0x29, (byte) 0xe8, (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4d, (byte) 0x53, (byte) 0x20, (byte) 0x50, (byte) 0x6f, (byte) 0x77, (byte) 0x65, (byte) 0x72, (byte) 0x50, (byte) 0x6f, (byte) 0x69, (byte) 0x6e, (byte) 0x74, (byte) 0x20, (byte) 0x39, (byte) 0x37}; - boolean flag6 = bytes.length > 2096 && Arrays.equals(Arrays.copyOfRange(bytes, 2072, 2096), byte6); + final boolean flag6 = bytes.length > 2096 && Arrays.equals(Arrays.copyOfRange(bytes, 2072, 2096), byte6); return flag2 || flag3 || flag4 || flag5 || flag6; } return false; } }, + /** + * docx + */ DOCX("application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return Objects.equals(FileMagicNumber.matchDocument(bytes), DOCX); } }, + /** + * pptx + */ PPTX("application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return Objects.equals(FileMagicNumber.matchDocument(bytes), PPTX); } }, + /** + * xlsx + */ XLSX("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return Objects.equals(FileMagicNumber.matchDocument(bytes), XLSX); } }, + // endregion - //document end ------------------------------------------------------------ - //other start ------------------------------------------------------------- + // region ----- others + /** + * wasm + */ WASM("application/wasm", "wasm") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 7 && Objects.equals(bytes[0], (byte) 0x00) && Objects.equals(bytes[1], (byte) 0x61) @@ -1022,10 +1234,13 @@ public enum FileMagicNumber { && Objects.equals(bytes[7], (byte) 0x00); } }, - // https://source.android.com/devices/tech/dalvik/dex-format#dex-file-magic + /** + * dex
+ * https://source.android.com/devices/tech/dalvik/dex-format#dex-file-magic + */ DEX("application/vnd.android.dex", "dex") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 36 && Objects.equals(bytes[0], (byte) 0x64) && Objects.equals(bytes[1], (byte) 0x65) @@ -1034,9 +1249,12 @@ public enum FileMagicNumber { && Objects.equals(bytes[36], (byte) 0x70); } }, + /** + * dey + */ DEY("application/vnd.android.dey", "dey") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { return bytes.length > 100 && Objects.equals(bytes[0], (byte) 0x64) && Objects.equals(bytes[1], (byte) 0x65) @@ -1045,113 +1263,172 @@ public enum FileMagicNumber { DEX.match(Arrays.copyOfRange(bytes, 40, 100)); } }, + /** + * eml + */ EML("message/rfc822", "eml") { @Override - public boolean match(byte[] bytes) { + public boolean match(final byte[] bytes) { if (bytes.length < 8) { return false; } - byte[] byte1 = new byte[]{(byte) 0x46, (byte) 0x72, (byte) 0x6F, (byte) 0x6D, (byte) 0x20, (byte) 0x20, (byte) 0x20}; - byte[] byte2 = new byte[]{(byte) 0x46, (byte) 0x72, (byte) 0x6F, (byte) 0x6D, (byte) 0x20, (byte) 0x3F, (byte) 0x3F, (byte) 0x3F}; - byte[] byte3 = new byte[]{(byte) 0x46, (byte) 0x72, (byte) 0x6F, (byte) 0x6D, (byte) 0x3A, (byte) 0x20}; - byte[] byte4 = new byte[]{(byte) 0x52, (byte) 0x65, (byte) 0x74, (byte) 0x75, (byte) 0x72, (byte) 0x6E, (byte) 0x2D, (byte) 0x50, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x3A, (byte) 0x20}; + final byte[] byte1 = new byte[]{(byte) 0x46, (byte) 0x72, (byte) 0x6F, (byte) 0x6D, (byte) 0x20, (byte) 0x20, (byte) 0x20}; + final byte[] byte2 = new byte[]{(byte) 0x46, (byte) 0x72, (byte) 0x6F, (byte) 0x6D, (byte) 0x20, (byte) 0x3F, (byte) 0x3F, (byte) 0x3F}; + final byte[] byte3 = new byte[]{(byte) 0x46, (byte) 0x72, (byte) 0x6F, (byte) 0x6D, (byte) 0x3A, (byte) 0x20}; + final byte[] byte4 = new byte[]{(byte) 0x52, (byte) 0x65, (byte) 0x74, (byte) 0x75, (byte) 0x72, (byte) 0x6E, (byte) 0x2D, (byte) 0x50, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x3A, (byte) 0x20}; return Arrays.equals(Arrays.copyOfRange(bytes, 0, 7), byte1) || Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte2) || Arrays.equals(Arrays.copyOfRange(bytes, 0, 6), byte3) || bytes.length > 13 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 13), byte4); } }, + /** + * mdb + */ MDB("application/vnd.ms-access", "mdb") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x53, (byte) 0x74, (byte) 0x61, (byte) 0x6E, (byte) 0x64, + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x53, (byte) 0x74, (byte) 0x61, (byte) 0x6E, (byte) 0x64, (byte) 0x61, (byte) 0x72, (byte) 0x64, (byte) 0x20, (byte) 0x4A, (byte) 0x65, (byte) 0x74, (byte) 0x20, (byte) 0x44, (byte) 0x42}; return bytes.length > 18 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 18), byte1); } }, - //CHM 49 54 53 46 + /** + * CHM 49 54 53 46 + */ CHM("application/vnd.ms-htmlhelp", "chm") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0x49, (byte) 0x54, (byte) 0x53, (byte) 0x46}; + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0x49, (byte) 0x54, (byte) 0x53, (byte) 0x46}; return bytes.length > 4 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 4), byte1); } }, - //class CA FE BA BE + + /** + * class CA FE BA BE + */ CLASS("application/java-vm", "class") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0xCA, (byte) 0xFE, (byte) 0xBA, (byte) 0xBE}; + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0xCA, (byte) 0xFE, (byte) 0xBA, (byte) 0xBE}; return bytes.length > 4 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 4), byte1); } }, - //torrent 64 38 3A 61 6E 6E 6F 75 6E 63 65 + /** + * torrent 64 38 3A 61 6E 6E 6F 75 6E 63 65 + */ TORRENT("application/x-bittorrent", "torrent") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0x64, (byte) 0x38, (byte) 0x3A, (byte) 0x61, (byte) 0x6E, (byte) 0x6E, (byte) 0x6F, (byte) 0x75, (byte) 0x6E, (byte) 0x63, (byte) 0x65}; + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0x64, (byte) 0x38, (byte) 0x3A, (byte) 0x61, (byte) 0x6E, (byte) 0x6E, (byte) 0x6F, (byte) 0x75, (byte) 0x6E, (byte) 0x63, (byte) 0x65}; return bytes.length > 11 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 11), byte1); } }, + /** + * wpd + */ WPD("application/vnd.wordperfect", "wpd") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0xFF, (byte) 0x57, (byte) 0x50, (byte) 0x43}; + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0xFF, (byte) 0x57, (byte) 0x50, (byte) 0x43}; return bytes.length > 4 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 4), byte1); } }, + /** + * dbx + */ DBX("", "dbx") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0xCF, (byte) 0xAD, (byte) 0x12, (byte) 0xFE}; + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0xCF, (byte) 0xAD, (byte) 0x12, (byte) 0xFE}; return bytes.length > 4 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 4), byte1); } }, + /** + * pst + */ PST("application/vnd.ms-outlook-pst", "pst") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0x21, (byte) 0x42, (byte) 0x44, (byte) 0x4E}; + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0x21, (byte) 0x42, (byte) 0x44, (byte) 0x4E}; return bytes.length > 4 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 4), byte1); } }, + /** + * ram + */ RAM("audio/x-pn-realaudio", "ram") { @Override - public boolean match(byte[] bytes) { - byte[] byte1 = new byte[]{(byte) 0x2E, (byte) 0x72, (byte) 0x61, (byte) 0xFD, (byte) 0x00}; + public boolean match(final byte[] bytes) { + final byte[] byte1 = new byte[]{(byte) 0x2E, (byte) 0x72, (byte) 0x61, (byte) 0xFD, (byte) 0x00}; return bytes.length > 5 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 5), byte1); } } - //other end --------------------------------------------------------------- + // endregion ; - private final String mimeType; - private final String extension; - FileMagicNumber(String mimeType, String extension) { - this.mimeType = mimeType; - this.extension = extension; - } - - public static FileMagicNumber getMagicNumber(byte[] bytes) { - FileMagicNumber number = Arrays.stream(values()) + /** + * 根据给定的bytes,获取对应识别到的{@code FileMagicNumber} + * + * @param bytes bytes魔数 + * @return {@code FileMagicNumber} + */ + public static FileMagicNumber getMagicNumber(final byte[] bytes) { + final FileMagicNumber number = Arrays.stream(values()) .filter(fileMagicNumber -> fileMagicNumber.match(bytes)) .findFirst() .orElse(UNKNOWN); - if (number.equals(FileMagicNumber.ZIP)) { - FileMagicNumber fn = FileMagicNumber.matchDocument(bytes); + + // 压缩文档类型,如office或jar等 + if (FileMagicNumber.ZIP.equals(number)) { + final FileMagicNumber fn = FileMagicNumber.matchDocument(bytes); return fn == UNKNOWN ? ZIP : fn; } return number; } + private final String mimeType; + private final String extension; + + /** + * 构造 + * + * @param mimeType 媒体类型 + * @param extension 扩展名 + */ + FileMagicNumber(final String mimeType, final String extension) { + this.mimeType = mimeType; + this.extension = extension; + } + + /** + * 获取媒体类型 + * + * @return 媒体类型 + */ public String getMimeType() { return mimeType; } + /** + * 获取扩展名 + * + * @return 扩展名 + */ public String getExtension() { return extension; } - private static int indexOf(byte[] array, byte[] target) { + /** + * 是否匹配bytes + * + * @param bytes bytes + * @return 是否匹配 + */ + public abstract boolean match(byte[] bytes); + + // region ----- private static methods + private static int indexOf(final byte[] array, final byte[] target) { if (array == null || target == null || array.length < target.length) { return -1; } @@ -1172,19 +1449,26 @@ public enum FileMagicNumber { } //处理 Open XML 类型的文件 - private static boolean compareBytes(byte[] buf, byte[] slice, int startOffset) { - int sl = slice.length; + private static boolean compareBytes(final byte[] buf, final byte[] slice, final int startOffset) { + final int sl = slice.length; if (startOffset + sl > buf.length) { return false; } - byte[] sub = Arrays.copyOfRange(buf, startOffset, startOffset + sl); + final byte[] sub = Arrays.copyOfRange(buf, startOffset, startOffset + sl); return Arrays.equals(sub, slice); } - private static FileMagicNumber matchOpenXmlMime(byte[] bytes, int offset) { - byte[] word = new byte[]{'w', 'o', 'r', 'd', '/'}; - byte[] ppt = new byte[]{'p', 'p', 't', '/'}; - byte[] xl = new byte[]{'x', 'l', '/'}; + /** + * 判断OpenXML文档类型 + * + * @param bytes bytes魔数 + * @param offset 偏移 + * @return {@code FileMagicNumber} + */ + private static FileMagicNumber matchOpenXmlMime(final byte[] bytes, final int offset) { + final byte[] word = new byte[]{'w', 'o', 'r', 'd', '/'}; + final byte[] ppt = new byte[]{'p', 'p', 't', '/'}; + final byte[] xl = new byte[]{'x', 'l', '/'}; if (FileMagicNumber.compareBytes(bytes, word, offset)) { return FileMagicNumber.DOCX; } @@ -1197,17 +1481,23 @@ public enum FileMagicNumber { return FileMagicNumber.UNKNOWN; } - private static FileMagicNumber matchDocument(byte[] bytes) { - FileMagicNumber fileMagicNumber = FileMagicNumber.matchOpenXmlMime(bytes, (byte) 0x1e); + /** + * 匹配文档类型 + * + * @param bytes bytes魔数 + * @return 匹配到的文档类型 + */ + private static FileMagicNumber matchDocument(final byte[] bytes) { + final FileMagicNumber fileMagicNumber = FileMagicNumber.matchOpenXmlMime(bytes, (byte) 0x1e); if (false == fileMagicNumber.equals(UNKNOWN)) { return fileMagicNumber; } - byte[] bytes1 = new byte[]{0x5B, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x5F, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5D, 0x2E, 0x78, 0x6D, 0x6C}; - byte[] bytes2 = new byte[]{0x5F, 0x72, 0x65, 0x6C, 0x73, 0x2F, 0x2E, 0x72, 0x65, 0x6C, 0x73}; - byte[] bytes3 = new byte[]{0x64, 0x6F, 0x63, 0x50, 0x72, 0x6F, 0x70, 0x73}; - boolean flag1 = FileMagicNumber.compareBytes(bytes, bytes1, (byte) 0x1e); - boolean flag2 = FileMagicNumber.compareBytes(bytes, bytes2, (byte) 0x1e); - boolean flag3 = FileMagicNumber.compareBytes(bytes, bytes3, (byte) 0x1e); + final byte[] bytes1 = new byte[]{0x5B, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x5F, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5D, 0x2E, 0x78, 0x6D, 0x6C}; + final byte[] bytes2 = new byte[]{0x5F, 0x72, 0x65, 0x6C, 0x73, 0x2F, 0x2E, 0x72, 0x65, 0x6C, 0x73}; + final byte[] bytes3 = new byte[]{0x64, 0x6F, 0x63, 0x50, 0x72, 0x6F, 0x70, 0x73}; + final boolean flag1 = FileMagicNumber.compareBytes(bytes, bytes1, (byte) 0x1e); + final boolean flag2 = FileMagicNumber.compareBytes(bytes, bytes2, (byte) 0x1e); + final boolean flag3 = FileMagicNumber.compareBytes(bytes, bytes3, (byte) 0x1e); if (false == (flag1 || flag2 || flag3)) { return UNKNOWN; } @@ -1217,7 +1507,7 @@ public enum FileMagicNumber { if (index == -1) { continue; } - FileMagicNumber fn = FileMagicNumber.matchOpenXmlMime(bytes, index + 30); + final FileMagicNumber fn = FileMagicNumber.matchOpenXmlMime(bytes, index + 30); if (false == fn.equals(UNKNOWN)) { return fn; } @@ -1225,19 +1515,26 @@ public enum FileMagicNumber { return UNKNOWN; } - private static int searchSignature(byte[] bytes, int start, int rangeNum) { - byte[] signature = new byte[]{0x50, 0x4B, 0x03, 0x04}; - int length = bytes.length; + /** + * 查找文档签名(文档标识) + * + * @param bytes bytes + * @param start 开始位置 + * @param rangeNum 步进长度 + * @return 签名 + */ + @SuppressWarnings("SameParameterValue") + private static int searchSignature(final byte[] bytes, final int start, final int rangeNum) { + final byte[] signature = new byte[]{0x50, 0x4B, 0x03, 0x04}; + final int length = bytes.length; int end = start + rangeNum; if (end > length) { end = length; } - int index = FileMagicNumber.indexOf(Arrays.copyOfRange(bytes, start, end), signature); + final int index = FileMagicNumber.indexOf(Arrays.copyOfRange(bytes, start, end), signature); return (index == -1) ? -1 : (start + index); } - - public abstract boolean match(byte[] bytes); - + // endregion } diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java index 5590b81f7..f82e9e260 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java @@ -1,7 +1,6 @@ package cn.hutool.core.io.file; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.func.SerConsumer; @@ -19,7 +18,6 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.function.Function; /** * 文件读取器 diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileTypeUtil.java similarity index 85% rename from hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java rename to hutool-core/src/main/java/cn/hutool/core/io/file/FileTypeUtil.java index 1be5c63a8..04a7803ff 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileTypeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileTypeUtil.java @@ -1,7 +1,8 @@ -package cn.hutool.core.io; +package cn.hutool.core.io.file; import cn.hutool.core.codec.HexUtil; -import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; import java.io.File; @@ -32,7 +33,7 @@ public class FileTypeUtil { * @param extName 文件扩展名 * @return 之前已经存在的文件扩展名 */ - public static String putFileType(String fileStreamHexHead, String extName) { + public static String putFileType(final String fileStreamHexHead, final String extName) { return FILE_TYPE_MAP.put(fileStreamHexHead, extName); } @@ -42,7 +43,7 @@ public class FileTypeUtil { * @param fileStreamHexHead 文件流头部Hex信息 * @return 移除的文件扩展名 */ - public static String removeFileType(String fileStreamHexHead) { + public static String removeFileType(final String fileStreamHexHead) { return FILE_TYPE_MAP.remove(fileStreamHexHead); } @@ -52,13 +53,13 @@ public class FileTypeUtil { * @param fileStreamHexHead 文件流头部16进制字符串 * @return 文件类型,未找到为{@code null} */ - public static String getType(String fileStreamHexHead) { - for (Entry fileTypeEntry : FILE_TYPE_MAP.entrySet()) { + public static String getType(final String fileStreamHexHead) { + for (final Entry fileTypeEntry : FILE_TYPE_MAP.entrySet()) { if (StrUtil.startWithIgnoreCase(fileStreamHexHead, fileTypeEntry.getKey())) { return fileTypeEntry.getValue(); } } - byte[] bytes = (HexUtil.decodeHex(fileStreamHexHead)); + final byte[] bytes = (HexUtil.decodeHex(fileStreamHexHead)); return FileMagicNumber.getMagicNumber(bytes).getExtension(); } @@ -68,8 +69,9 @@ public class FileTypeUtil { * @param in 文件流 * @param fileHeadSize 自定义读取文件头部的大小 * @return 文件类型,未找到为{@code null} + * @throws IORuntimeException IO异常 */ - public static String getType(InputStream in,int fileHeadSize) throws IORuntimeException { + public static String getType(final InputStream in, final int fileHeadSize) throws IORuntimeException { return getType((IoUtil.readHex(in, fileHeadSize,false))); } @@ -82,7 +84,7 @@ public class FileTypeUtil { * @return 类型,文件的扩展名,未找到为{@code null} * @throws IORuntimeException 读取流引起的异常 */ - public static String getType(InputStream in,boolean isExact) throws IORuntimeException { + public static String getType(final InputStream in, final boolean isExact) throws IORuntimeException { return isExact ?getType(readHex8192Upper(in)) :getType(readHex64Upper(in)); @@ -96,7 +98,7 @@ public class FileTypeUtil { * @return 类型,文件的扩展名,未找到为{@code null} * @throws IORuntimeException 读取流引起的异常 */ - public static String getType(InputStream in) throws IORuntimeException { + public static String getType(final InputStream in) throws IORuntimeException { return getType(in,false); } @@ -116,7 +118,7 @@ public class FileTypeUtil { * @return 类型,文件的扩展名,未找到为{@code null} * @throws IORuntimeException 读取流引起的异常 */ - public static String getType(InputStream in, String filename) throws IORuntimeException { + public static String getType(final InputStream in, final String filename) throws IORuntimeException { return getType(in,filename,false); } @@ -136,7 +138,7 @@ public class FileTypeUtil { * @return 类型,文件的扩展名,未找到为{@code null} * @throws IORuntimeException 读取流引起的异常 */ - public static String getType(InputStream in, String filename,boolean isExact) throws IORuntimeException { + public static String getType(final InputStream in, final String filename, final boolean isExact) throws IORuntimeException { String typeName = getType(in,isExact); if (null == typeName) { // 未成功识别类型,扩展名辅助识别 @@ -193,7 +195,7 @@ public class FileTypeUtil { * @return 类型,文件的扩展名,未找到为{@code null} * @throws IORuntimeException 读取文件引起的异常 */ - public static String getType(File file,boolean isExact) throws IORuntimeException { + public static String getType(final File file, final boolean isExact) throws IORuntimeException { InputStream in = null; try { in = IoUtil.toStream(file); @@ -216,7 +218,7 @@ public class FileTypeUtil { * @return 类型,文件的扩展名,未找到为{@code null} * @throws IORuntimeException 读取文件引起的异常 */ - public static String getType(File file) throws IORuntimeException { + public static String getType(final File file) throws IORuntimeException { return getType(file,false); } @@ -228,7 +230,7 @@ public class FileTypeUtil { * @return 类型 * @throws IORuntimeException 读取文件引起的异常 */ - public static String getTypeByPath(String path,boolean isExact) throws IORuntimeException { + public static String getTypeByPath(final String path, final boolean isExact) throws IORuntimeException { return getType(FileUtil.file(path),isExact); } @@ -239,7 +241,7 @@ public class FileTypeUtil { * @return 类型 * @throws IORuntimeException 读取文件引起的异常 */ - public static String getTypeByPath(String path) throws IORuntimeException { + public static String getTypeByPath(final String path) throws IORuntimeException { return getTypeByPath(path,false); } @@ -252,7 +254,6 @@ public class FileTypeUtil { */ private static String readHex8192Upper(final InputStream in) throws IORuntimeException { try { - final int i = in.available(); return IoUtil.readHex(in, Math.min(8192, in.available()), false); } catch (final IOException e) { throw new RuntimeException(e); @@ -266,7 +267,7 @@ public class FileTypeUtil { * @return 16进制字符串 * @throws IORuntimeException IO异常 */ - private static String readHex64Upper(InputStream in) throws IORuntimeException { + private static String readHex64Upper(final InputStream in) throws IORuntimeException { return IoUtil.readHex(in, 64, false); } } diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileUtil.java old mode 100755 new mode 100644 similarity index 99% rename from hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java rename to hutool-core/src/main/java/cn/hutool/core/io/file/FileUtil.java index d284e6a07..b2472a9f8 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileUtil.java @@ -1,9 +1,9 @@ -package cn.hutool.core.io; +package cn.hutool.core.io.file; import cn.hutool.core.compress.ZipUtil; -import cn.hutool.core.io.file.FileReader; -import cn.hutool.core.io.file.*; -import cn.hutool.core.io.file.FileWriter; +import cn.hutool.core.io.BomReader; +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.stream.BOMInputStream; import cn.hutool.core.io.unit.DataSizeUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileWrapper.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileWrapper.java index 3c712c028..a7405a8b1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileWrapper.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileWrapper.java @@ -1,6 +1,5 @@ package cn.hutool.core.io.file; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.func.Wrapper; import cn.hutool.core.util.CharsetUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileWriter.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileWriter.java index 2e8c704b0..cd51770c2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileWriter.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileWriter.java @@ -1,6 +1,5 @@ package cn.hutool.core.io.file; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/LineReadWatcher.java b/hutool-core/src/main/java/cn/hutool/core/io/file/LineReadWatcher.java index 3abbb178d..e6acd1ebb 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/LineReadWatcher.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/LineReadWatcher.java @@ -1,6 +1,5 @@ package cn.hutool.core.io.file; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.watch.SimpleWatcher; import cn.hutool.core.lang.func.SerConsumer; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/Tailer.java b/hutool-core/src/main/java/cn/hutool/core/io/file/Tailer.java index 4b9410388..e15c504ad 100755 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/Tailer.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/Tailer.java @@ -2,7 +2,6 @@ package cn.hutool.core.io.file; import cn.hutool.core.date.DateUnit; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Console; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/ClassPathResource.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/ClassPathResource.java index d2553d510..4dfe544cd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/ClassPathResource.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/ClassPathResource.java @@ -1,7 +1,7 @@ package cn.hutool.core.io.resource; import cn.hutool.core.classloader.ClassLoaderUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.net.url.URLUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/FileResource.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/FileResource.java index 4f9f133fe..f35d598a5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/FileResource.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/FileResource.java @@ -1,6 +1,6 @@ package cn.hutool.core.io.resource; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.net.url.URLUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java index 1ce456083..dc03d3266 100755 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/ResourceUtil.java @@ -2,7 +2,7 @@ package cn.hutool.core.io.resource; import cn.hutool.core.collection.iter.EnumerationIter; import cn.hutool.core.collection.iter.IterUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.classloader.ClassLoaderUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/UrlResource.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/UrlResource.java index c68159df7..24903cb21 100755 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/UrlResource.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/UrlResource.java @@ -1,6 +1,6 @@ package cn.hutool.core.io.resource; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.net.url.URLUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/WebAppResource.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/WebAppResource.java index a7b57302a..e4fbecb63 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/WebAppResource.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/WebAppResource.java @@ -2,7 +2,7 @@ package cn.hutool.core.io.resource; import java.io.File; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; /** * Web root资源访问对象 diff --git a/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java b/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java index 4d9b3e983..d0900753d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java @@ -1,6 +1,6 @@ package cn.hutool.core.io.watch; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.watch.watchers.WatcherChain; import cn.hutool.core.text.StrUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java b/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java index 30f443e80..75c5dc584 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java @@ -1,6 +1,6 @@ package cn.hutool.core.net.multipart; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFileHeader.java b/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFileHeader.java index 88382709a..31bd3cc66 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFileHeader.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFileHeader.java @@ -1,6 +1,6 @@ package cn.hutool.core.net.multipart; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; /** diff --git a/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java b/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java index 5c7de2ac7..e40212402 100644 --- a/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java @@ -4,7 +4,7 @@ import cn.hutool.core.bean.NullWrapperBean; import cn.hutool.core.classloader.ClassLoaderUtil; import cn.hutool.core.convert.BasicType; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.net.url.URLDecoder; import cn.hutool.core.net.url.URLUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java index 6c572a5ee..bd8373d44 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -2102,4 +2102,36 @@ public class ArrayUtil extends PrimitiveArrayUtil { final Set elementSet = SetUtil.of(Arrays.asList(array)); return elementSet.size() != array.length; } + + /** + * array数组是否以prefix开头,每个元素的匹配使用{@link ObjUtil#equals(Object, Object)}匹配。 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @param 数组元素类型 + * @return 是否开头 + */ + public static boolean startWith(final T[] array, final T[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (ObjUtil.notEquals(array[i], prefix[i])) { + return false; + } + } + return true; + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java index 14d427164..18108aa08 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/CharsetUtil.java @@ -1,7 +1,7 @@ package cn.hutool.core.util; import cn.hutool.core.io.CharsetDetector; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; import java.io.File; diff --git a/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java index 2f446e5fd..32dce00d9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java @@ -18,8 +18,7 @@ public class PrimitiveArrayUtil { */ public static final int INDEX_NOT_FOUND = -1; - // ---------------------------------------------------------------------- isEmpty - + // region ----- isEmpty /** * 数组是否为空 * @@ -99,8 +98,9 @@ public class PrimitiveArrayUtil { public static boolean isEmpty(final boolean[] array) { return array == null || array.length == 0; } + // endregion - // ---------------------------------------------------------------------- isNotEmpty + // region ----- isNotEmpty /** * 数组是否为非空 @@ -181,8 +181,9 @@ public class PrimitiveArrayUtil { public static boolean isNotEmpty(final boolean[] array) { return false == isEmpty(array); } + // endregion - // ---------------------------------------------------------------------- resize + // region ----- resize /** * 生成一个新的重新设置大小的数组
@@ -203,8 +204,9 @@ public class PrimitiveArrayUtil { } return newArray; } + // endregion - // ---------------------------------------------------------------------- addAll + // region ----- addAll /** * 将多个数组合并在一起
@@ -461,8 +463,9 @@ public class PrimitiveArrayUtil { } return result; } + // endregion - // ---------------------------------------------------------------------- split + // region ----- split /** * 拆分byte数组为几个等份(最后一份按照剩余长度分配空间) @@ -472,7 +475,7 @@ public class PrimitiveArrayUtil { * @return 拆分后的数组 */ public static byte[][] split(final byte[] array, final int len) { - int amount = array.length / len; + final int amount = array.length / len; final int remainder = array.length % len; // 兼容切片长度大于原数组长度的情况 final boolean hasRemainder = remainder > 0; @@ -493,8 +496,9 @@ public class PrimitiveArrayUtil { } return arrays; } + // endregion - // ---------------------------------------------------------------------- indexOf、LastIndexOf、contains + // region ----- indexOf、LastIndexOf、contains /** * 返回数组中指定元素所在位置,未找到返回{@link #INDEX_NOT_FOUND} @@ -895,8 +899,9 @@ public class PrimitiveArrayUtil { public static boolean contains(final boolean[] array, final boolean value) { return indexOf(array, value) > INDEX_NOT_FOUND; } + // endregion - // ------------------------------------------------------------------- Wrap and unwrap + // region ----- Wrap and unwrap /** * 将原始类型数组包装为包装类型 @@ -1250,8 +1255,9 @@ public class PrimitiveArrayUtil { } return array; } + // endregion - // ------------------------------------------------------------------- sub + // region ----- sub /** * 获取子数组 @@ -1548,8 +1554,9 @@ public class PrimitiveArrayUtil { } return Arrays.copyOfRange(array, start, end); } + // endregion - // ------------------------------------------------------------------- remove + // region ----- remove /** * 移除数组中对应位置的元素
@@ -1693,7 +1700,7 @@ public class PrimitiveArrayUtil { return result; } - // ---------------------------------------------------------------------- removeEle + // region ----- removeEle /** * 移除数组中指定的元素
@@ -1814,8 +1821,9 @@ public class PrimitiveArrayUtil { public static boolean[] removeEle(final boolean[] array, final boolean element) throws IllegalArgumentException { return remove(array, indexOf(array, element)); } + // endregion - // ---------------------------------------------------------------------- reverse + // region ----- reverse /** * 反转数组,会变更原数组 @@ -2088,8 +2096,9 @@ public class PrimitiveArrayUtil { public static boolean[] reverse(final boolean[] array) { return reverse(array, 0, array.length); } + // endregion - // ------------------------------------------------------------------------------------------------------------ min and max + // region ------------------------------------------- min and max /** * 取最小值 @@ -2370,8 +2379,9 @@ public class PrimitiveArrayUtil { } return max; } + // endregion - // ---------------------------------------------------------------------- shuffle + // region ----- shuffle /** * 打乱数组顺序,会变更原数组 @@ -2636,8 +2646,9 @@ public class PrimitiveArrayUtil { return array; } + // endregion - // ---------------------------------------------------------------------- swap + // region ----- swap /** * 交换数组中两个位置的值 @@ -2791,7 +2802,7 @@ public class PrimitiveArrayUtil { return array; } - // ---------------------------------------------------------------------- asc and desc + // region ----- asc and desc /** * 检查数组是否升序,即{@code array[i] <= array[i+1]}
@@ -3111,7 +3122,257 @@ public class PrimitiveArrayUtil { return false; } } - return true; } + // endregion + + // region ----- startWith + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final boolean[] array, final boolean[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final byte[] array, final byte[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final char[] array, final char[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final double[] array, final double[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final float[] array, final float[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final int[] array, final int[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final long[] array, final long[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + + /** + * array数组是否以prefix开头 + *
    + *
  • array和prefix为同一个数组(即array == prefix),返回{@code true}
  • + *
  • array或prefix为空数组(null或length为0的数组),返回{@code true}
  • + *
  • prefix长度大于array,返回{@code false}
  • + *
+ * + * @param array 数组 + * @param prefix 前缀 + * @return 是否开头 + */ + public static boolean startWith(final short[] array, final short[] prefix) { + if (array == prefix) { + return true; + } + if(isEmpty(array)){ + return isEmpty(prefix); + } + if (prefix.length > array.length) { + return false; + } + + for (int i = 0; i < prefix.length; i++) { + if (array[i] != prefix[i]) { + return false; + } + } + return true; + } + // endregion } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java index 65d66f91a..ffab70fcf 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java @@ -4,11 +4,10 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.lang.Console; import cn.hutool.core.map.BiMap; import cn.hutool.core.map.MapUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-core/src/test/java/cn/hutool/core/compress/ZipWriterTest.java b/hutool-core/src/test/java/cn/hutool/core/compress/ZipWriterTest.java index f575483ab..c38f5a213 100755 --- a/hutool-core/src/test/java/cn/hutool/core/compress/ZipWriterTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/compress/ZipWriterTest.java @@ -1,6 +1,6 @@ package cn.hutool.core.compress; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.FileResource; import cn.hutool.core.util.CharsetUtil; import org.junit.Ignore; diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToArrayTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToArrayTest.java index af486b7ee..bee7c8a4b 100644 --- a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToArrayTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToArrayTest.java @@ -1,7 +1,7 @@ package cn.hutool.core.convert; import cn.hutool.core.convert.impl.ArrayConverter; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import org.junit.Assert; import org.junit.Ignore; diff --git a/hutool-core/src/test/java/cn/hutool/core/io/FileTypeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/FileTypeUtilTest.java index c626a4a52..e7d865f5f 100755 --- a/hutool-core/src/test/java/cn/hutool/core/io/FileTypeUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/FileTypeUtilTest.java @@ -1,5 +1,7 @@ package cn.hutool.core.io; +import cn.hutool.core.io.file.FileTypeUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Console; import org.junit.Assert; @@ -85,4 +87,11 @@ public class FileTypeUtilTest { final String type = FileTypeUtil.getType(inputStream); Console.log(type); } + + @Test + public void issueI6MACITest() { + final File file = FileUtil.file("text.txt"); + final String type = FileTypeUtil.getType(file); + Assert.assertEquals("txt", type); + } } 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 0edc2f82d..b5aac3796 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 @@ -2,6 +2,7 @@ package cn.hutool.core.io; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.file.LineSeparator; import cn.hutool.core.lang.Console; import cn.hutool.core.util.CharsetUtil; diff --git a/hutool-core/src/test/java/cn/hutool/core/io/NioUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/NioUtilTest.java index 334d76212..cacfbfafe 100755 --- a/hutool-core/src/test/java/cn/hutool/core/io/NioUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/NioUtilTest.java @@ -1,5 +1,6 @@ package cn.hutool.core.io; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.stream.EmptyOutputStream; import cn.hutool.core.lang.Console; diff --git a/hutool-core/src/test/java/cn/hutool/core/io/file/IssueI666HBTest.java b/hutool-core/src/test/java/cn/hutool/core/io/file/IssueI666HBTest.java index 6e16ca2f9..934daef76 100755 --- a/hutool-core/src/test/java/cn/hutool/core/io/file/IssueI666HBTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/file/IssueI666HBTest.java @@ -1,6 +1,5 @@ package cn.hutool.core.io.file; -import cn.hutool.core.io.FileUtil; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-core/src/test/java/cn/hutool/core/io/file/PathDeleterTest.java b/hutool-core/src/test/java/cn/hutool/core/io/file/PathDeleterTest.java index 98eba2832..32e9a7f1e 100755 --- a/hutool-core/src/test/java/cn/hutool/core/io/file/PathDeleterTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/file/PathDeleterTest.java @@ -1,6 +1,5 @@ package cn.hutool.core.io.file; -import cn.hutool.core.io.FileUtil; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java index 364d70051..62fb093d2 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/file/PathUtilTest.java @@ -1,6 +1,5 @@ package cn.hutool.core.io.file; -import cn.hutool.core.io.FileUtil; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-core/src/test/java/cn/hutool/core/io/file/TailerTest.java b/hutool-core/src/test/java/cn/hutool/core/io/file/TailerTest.java index 027abb049..7a365555d 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/file/TailerTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/file/TailerTest.java @@ -3,7 +3,6 @@ package cn.hutool.core.io.file; import org.junit.Ignore; import org.junit.Test; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.CharsetUtil; public class TailerTest { diff --git a/hutool-core/src/test/java/cn/hutool/core/io/resource/ResourceUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/resource/ResourceUtilTest.java index 437af0cf1..45981ce6e 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/resource/ResourceUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/resource/ResourceUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.core.io.resource; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; import org.junit.Assert; diff --git a/hutool-core/src/test/java/cn/hutool/core/thread/SimpleSchedulerTest.java b/hutool-core/src/test/java/cn/hutool/core/thread/SimpleSchedulerTest.java index 76ff6b082..a382c5e9d 100644 --- a/hutool-core/src/test/java/cn/hutool/core/thread/SimpleSchedulerTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/thread/SimpleSchedulerTest.java @@ -1,6 +1,6 @@ package cn.hutool.core.thread; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.RuntimeUtil; diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java index 5bad7fd2b..3c009e5c3 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java @@ -617,7 +617,7 @@ public class ArrayUtilTest { @Test public void subTest() { final int[] arr = {1, 2, 3, 4, 5}; - int[] empty = new int[0]; + final int[] empty = new int[0]; Assert.assertArrayEquals(empty, ArrayUtil.sub(arr, 2, 2)); Assert.assertArrayEquals(empty, ArrayUtil.sub(arr, 5, 5)); Assert.assertArrayEquals(empty, ArrayUtil.sub(arr, 5, 7)); @@ -689,4 +689,34 @@ public class ArrayUtilTest { Assert.assertTrue(ArrayUtil.hasSameElement(e)); } + + @Test + public void startWithTest() { + boolean b = ArrayUtil.startWith(new String[]{}, new String[]{}); + Assert.assertTrue(b); + + b = ArrayUtil.startWith(new String[]{"1", "2", "3"}, new String[]{"1"}); + Assert.assertTrue(b); + + b = ArrayUtil.startWith(new String[]{"1"}, new String[]{"1"}); + Assert.assertTrue(b); + + b = ArrayUtil.startWith((String[])null, null); + Assert.assertTrue(b); + } + + @Test + public void startWithTest2() { + boolean b = ArrayUtil.startWith(new int[]{}, new int[]{}); + Assert.assertTrue(b); + + b = ArrayUtil.startWith(new int[]{1,2,3}, new int[]{1}); + Assert.assertTrue(b); + + b = ArrayUtil.startWith(new int[]{1}, new int[]{1}); + Assert.assertTrue(b); + + b = ArrayUtil.startWith((int[])null, null); + Assert.assertTrue(b); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java index aac0e1b76..f6011e994 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java @@ -2,7 +2,7 @@ package cn.hutool.core.util; import cn.hutool.core.compress.ZipReader; import cn.hutool.core.compress.ZipUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.lang.Console; import cn.hutool.core.text.StrUtil; diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java index 5f028e992..7d2e87923 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java @@ -1,7 +1,7 @@ package cn.hutool.crypto; import cn.hutool.core.codec.BaseN.Base64; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ArrayUtil; diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java index 7259d347e..046087077 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/Digester.java @@ -1,6 +1,6 @@ package cn.hutool.crypto.digest; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ArrayUtil; diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java index a30d9f133..8b5c4e7cb 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/Mac.java @@ -1,7 +1,7 @@ package cn.hutool.crypto.digest.mac; import cn.hutool.core.codec.BaseN.Base64; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.codec.HexUtil; diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java index 86173e5d4..e1e642300 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/PemUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.crypto; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.crypto.asymmetric.KeyType; diff --git a/hutool-db/src/test/java/cn/hutool/db/PicTransferTest.java b/hutool-db/src/test/java/cn/hutool/db/PicTransferTest.java index 9d1e70dc3..71f85f6d7 100644 --- a/hutool-db/src/test/java/cn/hutool/db/PicTransferTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/PicTransferTest.java @@ -1,7 +1,7 @@ package cn.hutool.db; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/SevenZArchiver.java b/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/SevenZArchiver.java index 2762a5233..31650006f 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/SevenZArchiver.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/SevenZArchiver.java @@ -1,6 +1,6 @@ package cn.hutool.extra.compress.archiver; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/StreamArchiver.java b/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/StreamArchiver.java index 052c4657a..66ce4bbb3 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/StreamArchiver.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/StreamArchiver.java @@ -1,6 +1,6 @@ package cn.hutool.extra.compress.archiver; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/SevenZExtractor.java b/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/SevenZExtractor.java index 637f326b2..f452e5523 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/SevenZExtractor.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/SevenZExtractor.java @@ -1,6 +1,6 @@ package cn.hutool.extra.compress.extractor; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/StreamExtractor.java b/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/StreamExtractor.java index 5c907dc72..75172b6d4 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/StreamExtractor.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/StreamExtractor.java @@ -1,6 +1,6 @@ package cn.hutool.extra.compress.extractor; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; 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 8de423650..1af69d6a3 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 @@ -1,7 +1,7 @@ package cn.hutool.extra.ftp; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.CharUtil; 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 6092b475d..6b251c1a6 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/ftp/Ftp.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/ftp/Ftp.java @@ -1,7 +1,7 @@ package cn.hutool.extra.ftp; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.lang.Assert; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java b/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java index 6c0650676..24b8d52a9 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/mail/Mail.java @@ -1,7 +1,7 @@ package cn.hutool.extra.mail; import cn.hutool.core.lang.builder.Builder; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/management/RuntimeInfo.java b/hutool-extra/src/main/java/cn/hutool/extra/management/RuntimeInfo.java index e6cf3eca6..ae6b35e0c 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/management/RuntimeInfo.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/management/RuntimeInfo.java @@ -1,6 +1,6 @@ package cn.hutool.extra.management; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import java.io.Serializable; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java index 1dec0bcc0..f9dda33d6 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrConfig.java @@ -1,6 +1,6 @@ package cn.hutool.extra.qrcode; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.swing.img.ImgUtil; import com.google.zxing.BarcodeFormat; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java index 6d80f8a84..b036c7326 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java @@ -6,7 +6,7 @@ import cn.hutool.core.bean.copier.ValueProvider; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.iter.ArrayIter; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.map.CaseInsensitiveMap; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java index c58da909f..a6d6325b0 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java @@ -6,7 +6,7 @@ import cn.hutool.core.bean.copier.ValueProvider; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.iter.ArrayIter; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.map.CaseInsensitiveMap; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/ssh/Sftp.java b/hutool-extra/src/main/java/cn/hutool/extra/ssh/Sftp.java index 675b55c2d..bd01b8da7 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/ssh/Sftp.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/ssh/Sftp.java @@ -2,7 +2,7 @@ package cn.hutool.extra.ssh; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.extra.ftp.AbstractFtp; import cn.hutool.extra.ftp.FtpConfig; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/Template.java b/hutool-extra/src/main/java/cn/hutool/extra/template/Template.java index feb6dca32..be7f4d4f7 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/Template.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/Template.java @@ -1,6 +1,6 @@ package cn.hutool.extra.template; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import java.io.BufferedOutputStream; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java index b7dce0f16..e03a5457b 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/EnjoyEngine.java @@ -1,6 +1,6 @@ package cn.hutool.extra.template.engine.enjoy; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.id.IdUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.extra.template.Template; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/freemarker/FreemarkerEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/freemarker/FreemarkerEngine.java index 876638de0..69cf65b83 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/freemarker/FreemarkerEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/freemarker/FreemarkerEngine.java @@ -1,7 +1,7 @@ package cn.hutool.extra.template.engine.freemarker; import cn.hutool.core.classloader.ClassLoaderUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/thymeleaf/ThymeleafEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/thymeleaf/ThymeleafEngine.java index dbd57ea3f..a527113cd 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/thymeleaf/ThymeleafEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/thymeleaf/ThymeleafEngine.java @@ -7,7 +7,7 @@ import org.thymeleaf.templateresolver.FileTemplateResolver; import org.thymeleaf.templateresolver.ITemplateResolver; import org.thymeleaf.templateresolver.StringTemplateResolver; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java index 30a796d7f..e7c813703 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/WitEngine.java @@ -1,6 +1,6 @@ package cn.hutool.extra.template.engine.wit; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.map.Dict; import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/xml/JAXBUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/xml/JAXBUtil.java index ec13c635c..9a1cf4b30 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/xml/JAXBUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/xml/JAXBUtil.java @@ -1,7 +1,7 @@ package cn.hutool.extra.xml; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.CharsetUtil; diff --git a/hutool-extra/src/test/java/cn/hutool/extra/compress/ArchiverTest.java b/hutool-extra/src/test/java/cn/hutool/extra/compress/ArchiverTest.java index 9fe4bf34a..a180f4a7f 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/compress/ArchiverTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/compress/ArchiverTest.java @@ -1,6 +1,6 @@ package cn.hutool.extra.compress; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.CharsetUtil; import cn.hutool.extra.compress.archiver.StreamArchiver; diff --git a/hutool-extra/src/test/java/cn/hutool/extra/compress/ExtractorTest.java b/hutool-extra/src/test/java/cn/hutool/extra/compress/ExtractorTest.java index c7aba91ac..bf2407e5f 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/compress/ExtractorTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/compress/ExtractorTest.java @@ -1,6 +1,6 @@ package cn.hutool.extra.compress; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.extra.compress.extractor.Extractor; import org.junit.Ignore; 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 84b78366e..fb18662ef 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 @@ -1,6 +1,6 @@ package cn.hutool.extra.ftp; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Console; import cn.hutool.extra.ssh.Sftp; diff --git a/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java b/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java index caf30961b..bf84e765d 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/mail/MailTest.java @@ -1,6 +1,6 @@ package cn.hutool.extra.mail; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java index cacda174b..807405e88 100755 --- a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java @@ -1,7 +1,7 @@ package cn.hutool.extra.qrcode; import cn.hutool.core.codec.BaseN.Base64; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.text.StrUtil; diff --git a/hutool-http/src/main/java/cn/hutool/http/client/body/MultipartOutputStream.java b/hutool-http/src/main/java/cn/hutool/http/client/body/MultipartOutputStream.java index ceb99425f..24627c79e 100644 --- a/hutool-http/src/main/java/cn/hutool/http/client/body/MultipartOutputStream.java +++ b/hutool-http/src/main/java/cn/hutool/http/client/body/MultipartOutputStream.java @@ -1,7 +1,7 @@ package cn.hutool.http.client.body; import cn.hutool.core.convert.Convert; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.resource.HttpResource; diff --git a/hutool-http/src/main/java/cn/hutool/http/client/body/ResponseBody.java b/hutool-http/src/main/java/cn/hutool/http/client/body/ResponseBody.java index ae5d3f3a8..c1019d73c 100755 --- a/hutool-http/src/main/java/cn/hutool/http/client/body/ResponseBody.java +++ b/hutool-http/src/main/java/cn/hutool/http/client/body/ResponseBody.java @@ -1,6 +1,6 @@ package cn.hutool.http.client.body; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.StreamProgress; import cn.hutool.core.io.file.FileNameUtil; diff --git a/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java b/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java index ff04da7ac..aad4635d9 100644 --- a/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java +++ b/hutool-http/src/main/java/cn/hutool/http/server/HttpServerResponse.java @@ -1,6 +1,6 @@ package cn.hutool.http.server; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.net.url.URLEncoder; diff --git a/hutool-http/src/main/java/cn/hutool/http/server/action/RootAction.java b/hutool-http/src/main/java/cn/hutool/http/server/action/RootAction.java index ce1b31c9a..e8cf6149e 100644 --- a/hutool-http/src/main/java/cn/hutool/http/server/action/RootAction.java +++ b/hutool-http/src/main/java/cn/hutool/http/server/action/RootAction.java @@ -1,7 +1,7 @@ package cn.hutool.http.server.action; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.http.server.HttpServerRequest; import cn.hutool.http.server.HttpServerResponse; diff --git a/hutool-http/src/test/java/cn/hutool/http/DownloadTest.java b/hutool-http/src/test/java/cn/hutool/http/DownloadTest.java index 15e73e42d..ec5e36eb7 100644 --- a/hutool-http/src/test/java/cn/hutool/http/DownloadTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/DownloadTest.java @@ -1,7 +1,7 @@ package cn.hutool.http; import cn.hutool.core.codec.BaseN.Base64; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.StreamProgress; import cn.hutool.core.lang.Console; diff --git a/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java b/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java index 4d67192e7..46205f016 100755 --- a/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/HttpUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.http; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.regex.ReUtil; import cn.hutool.core.util.CharsetUtil; diff --git a/hutool-http/src/test/java/cn/hutool/http/UploadTest.java b/hutool-http/src/test/java/cn/hutool/http/UploadTest.java index b6095fadf..2117b9be7 100644 --- a/hutool-http/src/test/java/cn/hutool/http/UploadTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/UploadTest.java @@ -1,6 +1,6 @@ package cn.hutool.http; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.MultiFileResource; import cn.hutool.core.lang.Console; import cn.hutool.core.map.MapUtil; diff --git a/hutool-http/src/test/java/cn/hutool/http/server/SimpleServerTest.java b/hutool-http/src/test/java/cn/hutool/http/server/SimpleServerTest.java index 8b7a8be18..dffe0e455 100644 --- a/hutool-http/src/test/java/cn/hutool/http/server/SimpleServerTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/server/SimpleServerTest.java @@ -1,7 +1,7 @@ package cn.hutool.http.server; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.net.multipart.UploadFile; import cn.hutool.http.meta.ContentType; diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java index 7863af839..df799b09b 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java @@ -1,8 +1,7 @@ package cn.hutool.json; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; -import cn.hutool.core.io.file.FileReader; import cn.hutool.core.reflect.TypeReference; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ObjUtil; diff --git a/hutool-json/src/test/java/cn/hutool/json/JSONArrayTest.java b/hutool-json/src/test/java/cn/hutool/json/JSONArrayTest.java index 97a3ca581..a47014556 100755 --- a/hutool-json/src/test/java/cn/hutool/json/JSONArrayTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/JSONArrayTest.java @@ -2,7 +2,7 @@ package cn.hutool.json; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.ConvertException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.map.Dict; import cn.hutool.core.reflect.TypeReference; import cn.hutool.core.util.CharsetUtil; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvBaseReader.java b/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvBaseReader.java index 475d08d5f..609167f7f 100755 --- a/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvBaseReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvBaseReader.java @@ -1,6 +1,6 @@ package cn.hutool.poi.csv; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvReader.java b/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvReader.java index d80eabc81..86f98424e 100755 --- a/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvReader.java @@ -1,6 +1,6 @@ package cn.hutool.poi.csv; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.func.SerConsumer; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvWriter.java b/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvWriter.java index 30ec937d4..edab978bb 100755 --- a/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvWriter.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/csv/CsvWriter.java @@ -4,7 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.iter.ArrayIter; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/BigExcelWriter.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/BigExcelWriter.java index d8f619d85..cfeb73430 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/BigExcelWriter.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/BigExcelWriter.java @@ -1,6 +1,6 @@ package cn.hutool.poi.excel; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFSheet; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelReader.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelReader.java index 8dc63595a..a953aba71 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelReader.java @@ -1,6 +1,6 @@ package cn.hutool.poi.excel; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.func.SerBiConsumer; import cn.hutool.poi.excel.cell.CellEditor; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java index 85c9b7034..22a59c968 100755 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java @@ -1,7 +1,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.exceptions.DependencyException; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.regex.ReUtil; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java index b14a814e6..daf67cab2 100755 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java @@ -3,7 +3,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.comparator.IndexedComparator; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/WorkbookUtil.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/WorkbookUtil.java index ec41107ec..093b3bb26 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/WorkbookUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/WorkbookUtil.java @@ -1,7 +1,7 @@ package cn.hutool.poi.excel; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/ExcelSaxReader.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/ExcelSaxReader.java index 267c83adf..ebea0cd08 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/ExcelSaxReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/ExcelSaxReader.java @@ -1,6 +1,6 @@ package cn.hutool.poi.excel.sax; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.poi.exceptions.POIException; import java.io.File; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/word/DocUtil.java b/hutool-poi/src/main/java/cn/hutool/poi/word/DocUtil.java index 3d713eb6d..d949e20a5 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/word/DocUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/word/DocUtil.java @@ -1,6 +1,6 @@ package cn.hutool.poi.word; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.poi.exceptions.POIException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; diff --git a/hutool-poi/src/main/java/cn/hutool/poi/word/Word07Writer.java b/hutool-poi/src/main/java/cn/hutool/poi/word/Word07Writer.java index 473067d8a..5e390ea64 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/word/Word07Writer.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/word/Word07Writer.java @@ -1,6 +1,6 @@ package cn.hutool.poi.word; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvReaderTest.java b/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvReaderTest.java index 4e9c19931..9e1dd52ca 100755 --- a/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvReaderTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvReaderTest.java @@ -2,7 +2,7 @@ package cn.hutool.poi.csv; import cn.hutool.core.annotation.Alias; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.CharsetUtil; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvUtilTest.java b/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvUtilTest.java index cd929bb8e..689065c1f 100755 --- a/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvUtilTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvUtilTest.java @@ -2,7 +2,7 @@ package cn.hutool.poi.csv; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.CharsetUtil; import lombok.AllArgsConstructor; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvWriterTest.java b/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvWriterTest.java index 3321137a9..791d844f4 100755 --- a/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvWriterTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/csv/CsvWriterTest.java @@ -1,6 +1,6 @@ package cn.hutool.poi.csv; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.CharsetUtil; import org.junit.Ignore; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/csv/Issue2783Test.java b/hutool-poi/src/test/java/cn/hutool/poi/csv/Issue2783Test.java index c0c43a705..101dd6937 100755 --- a/hutool-poi/src/test/java/cn/hutool/poi/csv/Issue2783Test.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/csv/Issue2783Test.java @@ -1,6 +1,6 @@ package cn.hutool.poi.csv; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.func.SerConsumer; import cn.hutool.core.util.CharsetUtil; import org.junit.Ignore; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/BigExcelWriteTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/BigExcelWriteTest.java index 0c8aa0700..4c2c5e461 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/BigExcelWriteTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/BigExcelWriteTest.java @@ -2,7 +2,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.poi.excel.style.StyleUtil; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelFileUtilTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelFileUtilTest.java index df0a1853a..4b9a9f07c 100755 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelFileUtilTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelFileUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.poi.excel; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import org.junit.Assert; import org.junit.Test; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelSaxReadTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelSaxReadTest.java index cd0cb8f95..bafdfa8b3 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelSaxReadTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelSaxReadTest.java @@ -2,7 +2,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.text.StrUtil; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java index 930747589..cc9a69430 100755 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java @@ -2,7 +2,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.lang.id.IdUtil; import cn.hutool.core.map.MapUtil; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2307Test.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2307Test.java index 35c30d41e..58312bde4 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2307Test.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/Issue2307Test.java @@ -1,7 +1,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.xssf.usermodel.XSSFSheet; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/IssueI66Z6BTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/IssueI66Z6BTest.java index b2c08c300..e160fed80 100755 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/IssueI66Z6BTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/IssueI66Z6BTest.java @@ -1,7 +1,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/ofd/OfdWriterTest.java b/hutool-poi/src/test/java/cn/hutool/poi/ofd/OfdWriterTest.java index 9600ab3ce..292db1ef9 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/ofd/OfdWriterTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/ofd/OfdWriterTest.java @@ -1,6 +1,6 @@ package cn.hutool.poi.ofd; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java b/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java index 8b54e0996..510eaf870 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/word/WordWriterTest.java @@ -2,7 +2,7 @@ package cn.hutool.poi.word; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.lang.Console; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/hutool-setting/src/main/java/cn/hutool/setting/Setting.java b/hutool-setting/src/main/java/cn/hutool/setting/Setting.java index 3aad945c7..705f9079d 100644 --- a/hutool-setting/src/main/java/cn/hutool/setting/Setting.java +++ b/hutool-setting/src/main/java/cn/hutool/setting/Setting.java @@ -2,7 +2,7 @@ package cn.hutool.setting; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.Convert; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.resource.Resource; import cn.hutool.core.io.resource.ResourceUtil; diff --git a/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java b/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java index 516284d49..7715aeb86 100755 --- a/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java +++ b/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java @@ -1,6 +1,6 @@ package cn.hutool.setting; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.LineReader; import cn.hutool.core.io.resource.Resource; diff --git a/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java b/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java index c7bfac22d..f251cdc09 100644 --- a/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java +++ b/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java @@ -1,7 +1,7 @@ package cn.hutool.setting.dialect; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.resource.Resource; diff --git a/hutool-setting/src/main/java/cn/hutool/setting/dialect/PropsUtil.java b/hutool-setting/src/main/java/cn/hutool/setting/dialect/PropsUtil.java index 0c1c2f80d..a5c77b2ea 100644 --- a/hutool-setting/src/main/java/cn/hutool/setting/dialect/PropsUtil.java +++ b/hutool-setting/src/main/java/cn/hutool/setting/dialect/PropsUtil.java @@ -1,6 +1,5 @@ package cn.hutool.setting.dialect; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.io.resource.NoResourceException; import cn.hutool.core.map.SafeConcurrentHashMap; diff --git a/hutool-setting/src/test/java/cn/hutool/setting/yaml/YamlUtilTest.java b/hutool-setting/src/test/java/cn/hutool/setting/yaml/YamlUtilTest.java index c27825e39..ed409e3a2 100755 --- a/hutool-setting/src/test/java/cn/hutool/setting/yaml/YamlUtilTest.java +++ b/hutool-setting/src/test/java/cn/hutool/setting/yaml/YamlUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.setting.yaml; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.map.Dict; import cn.hutool.core.util.CharsetUtil; import org.junit.Assert; diff --git a/hutool-swing/src/main/java/cn/hutool/swing/captcha/AbstractCaptcha.java b/hutool-swing/src/main/java/cn/hutool/swing/captcha/AbstractCaptcha.java index ad031b020..e3202d6c7 100755 --- a/hutool-swing/src/main/java/cn/hutool/swing/captcha/AbstractCaptcha.java +++ b/hutool-swing/src/main/java/cn/hutool/swing/captcha/AbstractCaptcha.java @@ -1,7 +1,7 @@ package cn.hutool.swing.captcha; import cn.hutool.core.codec.BaseN.Base64; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.net.url.URLUtil; diff --git a/hutool-swing/src/main/java/cn/hutool/swing/img/BackgroundRemoval.java b/hutool-swing/src/main/java/cn/hutool/swing/img/BackgroundRemoval.java index 571e9ce59..21af9782b 100755 --- a/hutool-swing/src/main/java/cn/hutool/swing/img/BackgroundRemoval.java +++ b/hutool-swing/src/main/java/cn/hutool/swing/img/BackgroundRemoval.java @@ -1,6 +1,6 @@ package cn.hutool.swing.img; -import cn.hutool.core.io.FileTypeUtil; +import cn.hutool.core.io.file.FileTypeUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.swing.img.color.ColorUtil; diff --git a/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java index b16760b21..f4c81603c 100755 --- a/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java +++ b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgUtil.java @@ -1,7 +1,7 @@ package cn.hutool.swing.img; import cn.hutool.core.codec.BaseN.Base64; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; diff --git a/hutool-swing/src/main/java/cn/hutool/swing/img/ImgWriter.java b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgWriter.java index 0f07d572d..506fc39c2 100644 --- a/hutool-swing/src/main/java/cn/hutool/swing/img/ImgWriter.java +++ b/hutool-swing/src/main/java/cn/hutool/swing/img/ImgWriter.java @@ -1,6 +1,6 @@ package cn.hutool.swing.img; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; diff --git a/hutool-swing/src/test/java/cn/hutool/swing/RobotUtilTest.java b/hutool-swing/src/test/java/cn/hutool/swing/RobotUtilTest.java index 00c32e48c..17862906d 100755 --- a/hutool-swing/src/test/java/cn/hutool/swing/RobotUtilTest.java +++ b/hutool-swing/src/test/java/cn/hutool/swing/RobotUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.swing; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-swing/src/test/java/cn/hutool/swing/img/ImgTest.java b/hutool-swing/src/test/java/cn/hutool/swing/img/ImgTest.java index 4973c1823..16ebc058b 100755 --- a/hutool-swing/src/test/java/cn/hutool/swing/img/ImgTest.java +++ b/hutool-swing/src/test/java/cn/hutool/swing/img/ImgTest.java @@ -1,7 +1,7 @@ package cn.hutool.swing.img; -import cn.hutool.core.io.FileTypeUtil; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileTypeUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.net.url.URLUtil; import org.junit.Ignore; import org.junit.Test; diff --git a/hutool-swing/src/test/java/cn/hutool/swing/img/ImgUtilTest.java b/hutool-swing/src/test/java/cn/hutool/swing/img/ImgUtilTest.java index 47dcd5fdd..521f0b118 100755 --- a/hutool-swing/src/test/java/cn/hutool/swing/img/ImgUtilTest.java +++ b/hutool-swing/src/test/java/cn/hutool/swing/img/ImgUtilTest.java @@ -1,6 +1,6 @@ package cn.hutool.swing.img; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.lang.Console; import cn.hutool.swing.img.color.ColorUtil;