Ce face Path.relativize
baza.relativize(tinta) răspunde la întrebarea „cum ajung din baza la tinta?”. Pentru site și site/blog/java.html rezultatul este blog/java.html; pentru drumuri care urcă, apar ...
Este inversul lui resolve: baza.resolve(baza.relativize(tinta)) dă din nou tinta. Ambele căi trebuie să fie de același fel (ambele relative sau ambele absolute), altfel se aruncă IllegalArgumentException.
Parametri
| Parametru | Descriere |
|---|---|
alta |
Calea la care vrei să ajungi. |
Ce returnează
O cale relativă de la cale la alta.
Exemple
Exemplul 1: Drumuri relative
import java.nio.file.Path;
public class Main {
public static void main(String[] args) {
Path site = Path.of("site");
Path pagina = Path.of("site/blog/java.html");
Path stil = Path.of("site/css/stil.css");
System.out.println(site.relativize(pagina));
System.out.println(pagina.getParent().relativize(stil));
System.out.println(site.resolve(site.relativize(pagina)));
}
}
Rezultat
blog/java.html
../css/stil.css
site/blog/java.html
Exemplul 2: Listare cu căi relative la folderul de start
Files.walk dă căi care încep cu backup; cu relativize le afișăm fără acest prefix.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
Path backup = Path.of("backup");
Files.createDirectories(backup.resolve("poze/2026"));
Files.writeString(backup.resolve("poze/2026/munte.jpg"), "");
Files.writeString(backup.resolve("contacte.vcf"), "");
try (Stream<Path> s = Files.walk(backup)) {
s.filter(Files::isRegularFile).map(backup::relativize).sorted().forEach(System.out::println);
}
}
}
Rezultat
contacte.vcf
poze/2026/munte.jpg
Greșeli frecvente
- Amesteci o cale absolută cu una relativă:
IllegalArgumentException. Fă-le pe amândouă absolute cutoAbsolutePath(). - Încurci ordinea:
a.relativize(b)este drumul de laalab, nu invers.
Comenzi înrudite
Path.resolve: Adaugă o cale la sfârșitul altei căi: folder.resolve(„note.txt”) dă folder/note.txt.Path.normalize: Simplifică o cale: elimină „.” (folderul curent) și „..” împreună cu folderul dinaintea lui.Files.walk: Parcurge un folder cu tot ce conține, la orice adâncime, și dă toate căile ca Stream<Path>, începând cu folderul însuși.Path: Reprezintă calea unui fișier sau folder (ex. date/note.txt); nu verifică dacă fișierul există. toString o dă ca text.