JMRI: Accès aux fichiers Portables
JMRI
utilise des fichiers pour les icônes, images, fichiers
de panneau, scripts, et beaucoup d'autres choses. Les
références à ceux-ci sont couramment
utilisées ci-dessus par des codes différents,
et stockées dans des fichiers XML. Certains de ces
fichiers sont distribués avec JMRI, et certains sont
créés en dehors du répertoire de
distribution JMRI par l'utilisateur local.
En outre, JMRI est une application multi-plateforme, et
nous voulons être en mesure de déplacer les
fichiers XML JMRI à partir d'un ordinateur à un
autre, même d'un type différent, et les avoir
encore à travailler.
Pour ce faire, nous avons créé un
système de pseudo - URLs pour accéder à
l'emplacement des fichiers. Les noms de fichiers sont
utilisés en interne et stockés dans des
fichiers XML avec des préfixes qui identifient
l'emplacement du fichier qui se trouve d'une manière
indépendante du système.
Si le nom
- commence par "program", traiter le reste comme chemin
relatif du répertoire du programme
- commence avec une «preference:", traiter le reste
comme chemin d'accès relatif du répertoire
des préférences
- commence par "home«, traiter le reste comme
chemin d'accès relatif du répertoire dans la
propriété user.home, l'idée de Java
dans le répertoire home de l'utilisateur
- commence par "resource", traiter le reste comme chemin
relatif au répertoire du programme (obsolète,
voir «programme:" ci-dessus)
- commence par "file: ", traiter le reste comme un chemin
relatif au répertoire des ressources ci-dessous dans
le répertoire des preferences (obsolète, voir
la «préférence:" ci-dessus)
Sinon, traiter le nom comme un chemin relatif ci-dessous
le répertoire du programme pour fournir la
compatibilité descendante. Dans tous les cas, les
chemins absolus fonctionnent, mais ne seront pas compatibles
multi - plateforme . Les deux cas obsolètes seront
automatiquement supprimés lorsque le fichier
référencé est lu et
réécrit par le biais des mécanisme de
conversion décrits ci-dessous.
Implémentation
La classe
jmri.util.FileUtil
fournit des routines de traduction automatique pour faire :
- static public String getExternalFilename (String
pName)
- Convertir un nom interne (avec préfixes comme
ci-dessus) dans un chemin absolu pour une utilisation sur
l'ordinateur local. Il n'y a aucune garantie que le fichier
ou tout répertoire englobant soit effectivement
présent, mais le chemin sera syntaxiquement valide
sur l'ordinateur actuel.
- static public String getPortableFilename (File
fichier)
- static public String getPortableFilename (String
filename)
- Convertir un fichier ou une chaine filename dans une
chaîne nom avec le préfixe
approprié.
Vous devriez appeler getExternalFilename () avant de
passer le nom du fichier pour les Java communs , et
getPortableFilename () lorsque vous recevez un fichier ou le
nom d'une classe Java. C'est OK pour appeler l'une ou l'autre
plusieurs fois, comme ils vont juste passer à travers,
dans ce cas. En particulier, appelez getPortableFilename ()
avant de sauvegarder dans un fichier XML.