diff --git a/CHANGELOG.md b/CHANGELOG.md index 3128b86bc..8be224144 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * 【core 】 新增MetroHash(pr#532@Gitee) * 【core 】 SpringUtil增加publishEvent重载(pr#2139@Github) * 【core 】 DateUtil增加rangeContains、rangeNotContains(pr#537@Gitee) +* 【core 】 Resource增加isModified默认方法 ### 🐞Bug修复 * 【core 】 修复ChineseDate农历获取正月出现数组越界BUG(issue#2112@Github) 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 cb4179b95..3fcdea20a 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 @@ -20,6 +20,7 @@ public class FileResource implements Resource, Serializable { private static final long serialVersionUID = 1L; private final File file; + private final long lastModified; private final String name; // ----------------------------------------------------------------------- Constructor start @@ -60,6 +61,7 @@ public class FileResource implements Resource, Serializable { public FileResource(File file, String fileName) { Assert.notNull(file, "File must be not null !"); this.file = file; + this.lastModified = file.lastModified(); this.name = ObjectUtil.defaultIfNull(fileName, file::getName); } @@ -89,6 +91,11 @@ public class FileResource implements Resource, Serializable { return this.file; } + @Override + public boolean isModified() { + return this.lastModified != file.lastModified(); + } + /** * 返回路径 * @return 返回URL路径 diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiResource.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiResource.java index 8464aa808..608265bce 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiResource.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiResource.java @@ -63,6 +63,11 @@ public class MultiResource implements Resource, Iterable, Iterator + * 一般用于文件类资源,检查文件是否被修改过。 + * + * @return 是否变更 + * @since 5.7.21 + */ + default boolean isModified(){ + return false; + } + /** * 将资源内容写出到流,不关闭输出流,但是关闭资源流 * 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 fd6b23044..a6692e2cc 100644 --- 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 @@ -18,6 +18,7 @@ public class UrlResource implements Resource, Serializable{ private static final long serialVersionUID = 1L; protected URL url; + private long lastModified = 0; protected String name; //-------------------------------------------------------------------------------------- Constructor start @@ -36,6 +37,9 @@ public class UrlResource implements Resource, Serializable{ */ public UrlResource(URL url, String name) { this.url = url; + if(null != url && URLUtil.isFileURL(url)){ + this.lastModified = FileUtil.file(url).lastModified(); + } this.name = ObjectUtil.defaultIfNull(name, () -> (null != url ? FileUtil.getName(url.getPath()) : null)); } @@ -68,6 +72,12 @@ public class UrlResource implements Resource, Serializable{ return URLUtil.getStream(url); } + @Override + public boolean isModified() { + // lastModified == 0表示此资源非文件资源 + return (0 != this.lastModified) && this.lastModified != getFile().lastModified(); + } + /** * 获得File * @return {@link File} diff --git a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java index 724312695..90d424835 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/URLUtil.java @@ -461,6 +461,7 @@ public class URLUtil extends URLEncodeUtil { * @since 3.0.9 */ public static boolean isFileURL(URL url) { + Assert.notNull(url, "URL must be not null"); String protocol = url.getProtocol(); return (URL_PROTOCOL_FILE.equals(protocol) || // URL_PROTOCOL_VFSFILE.equals(protocol) || // @@ -474,6 +475,7 @@ public class URLUtil extends URLEncodeUtil { * @return 是否为jar包URL */ public static boolean isJarURL(URL url) { + Assert.notNull(url, "URL must be not null"); final String protocol = url.getProtocol(); return (URL_PROTOCOL_JAR.equals(protocol) || // URL_PROTOCOL_ZIP.equals(protocol) || // @@ -489,6 +491,7 @@ public class URLUtil extends URLEncodeUtil { * @since 4.1 */ public static boolean isJarFileURL(URL url) { + Assert.notNull(url, "URL must be not null"); return (URL_PROTOCOL_FILE.equals(url.getProtocol()) && // url.getPath().toLowerCase().endsWith(FileUtil.JAR_FILE_EXT)); } @@ -501,7 +504,7 @@ public class URLUtil extends URLEncodeUtil { * @since 3.2.1 */ public static InputStream getStream(URL url) { - Assert.notNull(url); + Assert.notNull(url, "URL must be not null"); try { return url.openStream(); } catch (IOException e) {