diff --git a/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java b/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java index bef6bbb8d4..c8677e659b 100644 --- a/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java +++ b/spring-core/src/main/java/org/springframework/core/io/AbstractFileResolvingResource.java @@ -80,7 +80,7 @@ public abstract class AbstractFileResolvingResource extends AbstractResource { } } } - catch (Exception ex) { + catch (IOException ex) { return false; } } @@ -110,18 +110,18 @@ public abstract class AbstractFileResolvingResource extends AbstractResource { if (contentLength > 0) { return true; } - else if (contentLength < 0) { + else if (contentLength == 0) { + // Empty file or directory -> not considered readable... return false; } - // 0 length: either an empty file or a directory... - // On current JDKs, this will trigger an NPE from within the close() call - // for directories, only returning true for actual files with 0 length. - getInputStream().close(); - return true; + else { + // Fall back to stream existence: can we open the stream? + getInputStream().close(); + return true; + } } } - catch (Exception ex) { - // Usually an IOException but potentially a NullPointerException (see above) + catch (IOException ex) { return false; } } @@ -135,7 +135,7 @@ public abstract class AbstractFileResolvingResource extends AbstractResource { } return ResourceUtils.URL_PROTOCOL_FILE.equals(url.getProtocol()); } - catch (Exception ex) { + catch (IOException ex) { return false; } } @@ -186,7 +186,7 @@ public abstract class AbstractFileResolvingResource extends AbstractResource { } return ResourceUtils.URL_PROTOCOL_FILE.equals(uri.getScheme()); } - catch (Exception ex) { + catch (IOException ex) { return false; } } diff --git a/spring-core/src/main/java/org/springframework/core/io/Resource.java b/spring-core/src/main/java/org/springframework/core/io/Resource.java index c3fca9e5ec..896f4bcbc3 100644 --- a/spring-core/src/main/java/org/springframework/core/io/Resource.java +++ b/spring-core/src/main/java/org/springframework/core/io/Resource.java @@ -60,7 +60,7 @@ public interface Resource extends InputStreamSource { boolean exists(); /** - * Indicate whether the contents of this resource can be read via + * Indicate whether non-empty contents of this resource can be read via * {@link #getInputStream()}. *
Will be {@code true} for typical resource descriptors that exist * since it strictly implies {@link #exists()} semantics as of 5.1.