JMRI: Portable File Access
Author: Bob Jacobsen
Keywords: JMRI technical code

# 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..