Salut,
Cette question ne concerne pas Java mais les systèmes de fichiers.
Sous Unix (ou Linux), un lien symbolique est une sorte d'alias sur un chemin de fichier ou un dossier physique. Ainsi dans un dossier physique, on peut créer un fichier ou un dossier mais qui n'est physiquement dans ce dossier phyisque mais dans un autre dossier physique. Cela permet d'organiser ses fichiers physiques de différentes manières sans toucher au rangement physique.
Par exemple tu peux installer plusieurs JDK ou JRE physiquement, et avoir un lien symbolique sur l'un de ces dossier. Tu fais pointer JAVA_HOME et PATH sur ce lien symbolique. Ainsi, tu peux changer de version de JRE simplement en changeant le lien symbolique (en le faisant pointer sur l'un ou l'autre des dossies physiques), sans avoir à modifier tes variables d'envonnements ou tes commandes. Cela peut aussi te permettre d'accèder plus facilement par un lien sybolique court à un dossier qui se trouve dans une arborescence compliquée, genre montée sur une machine distante avec 10 niveaux de sous-répertoires.
Sous Windows NTFS, on peut aussi créer des liens symboliques.
Sous Windows FAT, l'approche est différente : on utilise les raccourcis. Un raccourci est un petit fichier qui contient la référence du fichier ou dossier physique, et Windows gère ça de façon transparente, mais ça ne constitue pas réellement des liens symboliques.
Par exemple, je créé une arborescence de dossiers C:\Temp\test\testniv2\testniv3 et j'y mets un ficheir texte : Nouveau document texte.txt.
Dans c:\temp, je créé un lien symbolique symlink (c'est le nom du dossier, comme pour n'importe quel dossier) en disant qu'il pointe sur mon dossier physique C:\Temp\test\testniv2\testniv3
Microsoft Windows [version 10.0.14393]
(c) 2016 Microsoft Corporation. Tous droits réservés.
c:\Temp>MKLINK /D symlink c:\Temp\test\testniv2\testniv3
Lien symbolique créé pour symlink <<===>> c:\Temp\test\testniv2\testniv3
c:\Temp>cd symlink
c:\Temp\symlink>dir
Le volume dans le lecteur C s’appelle OS
Le numéro de série du volume est 163B-A4E3
Répertoire de c:\Temp\symlink
21/01/2017 23:37 <DIR> .
21/01/2017 23:37 <DIR> ..
21/01/2017 23:37 0 Nouveau document texte.txt
1 fichier(s) 0 octets
2 Rép(s) 7*480*692*736 octets libres
c:\Temp\symlink>
Quand je me place dans c:\Temp\symlink, c'est comme si j'étais dans c:\Temp\test\testniv2\testniv3. Quand je fais dir, je vois le contenu de c:\Temp\test\testniv2\testniv3.
En Java, on peut faire de même :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class FichierDemo {
public static void main(String[] args) {
Path path = Paths.get("c:/temp/symlink");
try {
System.out.println("Lien symbolique : " + path);
showContent(path);
Path physical = path.toRealPath();
System.out.println("Dossier physique: " + physical);
showContent(physical);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void showContent(Path dir) throws IOException {
System.out.println("Contenu de "+dir);
try(DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for(Path path : stream) {
System.out.println(path);
}
}
}
} |
Qui affiche :
Lien symbolique : c:\temp\symlink
Contenu de c:\temp\symlink
c:\temp\symlink\Nouveau document texte.txt
Dossier physique: C:\Temp\test\testniv2\testniv3
Contenu de C:\Temp\test\testniv2\testniv3
C:\Temp\test\testniv2\testniv3\Nouveau document texte.txt
Partager