Skip to content

Commit

Permalink
Un-deprecate PathResource (for NIO Path resolution in createRelative)
Browse files Browse the repository at this point in the history
Includes aligned createRelative signature and dedicated java.io.File test.

Closes gh-24211
  • Loading branch information
jhoeller committed Dec 16, 2019
1 parent f353bc0 commit 0711e58
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -49,6 +49,7 @@
*
* @author Juergen Hoeller
* @since 28.12.2003
* @see #FileSystemResource(String)
* @see #FileSystemResource(File)
* @see #FileSystemResource(Path)
* @see java.io.File
Expand Down Expand Up @@ -108,6 +109,15 @@ public FileSystemResource(File file) {
* <p>In contrast to {@link PathResource}, this variant strictly follows the
* general {@link FileSystemResource} conventions, in particular in terms of
* path cleaning and {@link #createRelative(String)} handling.
* <p>Note: When building relative resources via {@link #createRelative},
* the relative path will apply <i>at the same directory level</i>:
* e.g. Paths.get("C:/dir1"), relative path "dir2" -> "C:/dir2"!
* If you prefer to have relative paths built underneath the given root directory,
* use the {@link #FileSystemResource(String) constructor with a file path}
* to append a trailing slash to the root path: "C:/dir1/", which indicates
* this directory as root for all relative paths. Alternatively, consider
* using {@link PathResource#PathResource(Path)} for {@code java.nio.path.Path}
* resolution in {@code createRelative}, always nesting relative paths.
* @param filePath a Path handle to a file
* @since 5.1
* @see #FileSystemResource(File)
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -45,15 +45,16 @@
* in {@link FileSystemResource#FileSystemResource(Path) FileSystemResource},
* applying Spring's standard String-based path transformations but
* performing all operations via the {@link java.nio.file.Files} API.
* This {@code PathResource} is effectively a pure {@code java.nio.path.Path}
* based alternative with different {@code createRelative} behavior.
*
* @author Philippe Marschall
* @author Juergen Hoeller
* @since 4.0
* @see java.nio.file.Path
* @see java.nio.file.Files
* @deprecated as of 5.1.1, in favor of {@link FileSystemResource#FileSystemResource(Path)}
* @see FileSystemResource
*/
@Deprecated
public class PathResource extends AbstractResource implements WritableResource {

private final Path path;
Expand Down Expand Up @@ -253,7 +254,7 @@ public long lastModified() throws IOException {
* @see java.nio.file.Path#resolve(String)
*/
@Override
public Resource createRelative(String relativePath) throws IOException {
public Resource createRelative(String relativePath) {
return new PathResource(this.path.resolve(relativePath));
}

Expand Down
Expand Up @@ -17,6 +17,7 @@
package org.springframework.core.io;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
Expand Down Expand Up @@ -130,6 +131,14 @@ void fileSystemResource() throws IOException {
assertThat(resource).isEqualTo(new FileSystemResource(file));
}

@Test
void fileSystemResourceWithFile() throws IOException {
File file = new File(getClass().getResource("Resource.class").getFile());
Resource resource = new FileSystemResource(file);
doTestResource(resource);
assertThat(resource).isEqualTo(new FileSystemResource(file));
}

@Test
void fileSystemResourceWithFilePath() throws Exception {
Path filePath = Paths.get(getClass().getResource("Resource.class").toURI());
Expand Down

0 comments on commit 0711e58

Please sign in to comment.