Convertir Windows de style chemin dans chemin Unix
Je veux prendre une chaîne de caractères qui représente un chemin d'accès et le convertir en un absolu chemin Unix. Cette chaîne pourrait être dans Windows ou Unix styles, comme c'est le résultat d'un appel à MainClass.class.getClassLoader().getResource("").getPath()
, qui renvoie un style différent des chemins en fonction de votre système.
(Je fais ça pour un jeu que je suis en train d'écrire, dont une partie donne à l'utilisateur un simple "bash-ish" shell", et je veux que l'utilisateur soit capable de lire les fichiers. Le faux système de fichiers est stocké dans un répertoire normal de l'arbre dans un sous-répertoire de mon projet. Ce système va utiliser de style Unix chemins, et je veux être capable d'enchaîner des entrées des chemins avec la même chaîne de caractères (avec quelques modifications mineures à obtenir dans le bon répertoire) donc je peut trouver le contenu des fichiers.)
Aucune idées de comment je pourrais faire? J'ai essayé un certain nombre de choses, mais je n'arrive pas à le faire fonctionner correctement sur l'ami de mon système Windows 7.
Pour le moment je suis juste en utilisant une chose simple qui vérifie si la chaîne commence par "C: \" ou quelque chose de similaire, puis remplace les barres obliques inverses par des barres obliques, mais il n'ya aucun moyen que cela peut être une bonne façon d'aller à ce sujet, et je suis sûr que d'autres personnes ont été confrontées au problème de chemin d'accès différent styles avant. C'est très certainement une solution temporaire.
La question semble assez raisonnable pour moi sans code.
Parfaitement raisonnable question. org.apache.commons.io.FilenameUtils.normalize(nom, true) faire ce qui est nécessaire. Il est parfaitement raisonnable de vouloir le faire, et au lieu d'expliquer pourquoi un utilisateur ne devrait pas, pourquoi ne pas publier la réponse?
OriginalL'auteur charliegreen | 2012-11-11
Vous devez vous connecter pour publier un commentaire.
En général, je n'ai jamais eu de problèmes sur n'importe quel système d'exploitation avec l'aide d'un '/' comme séparateur.
fonctionne au moins sur Unix, Windows et iSeries.
Si vous voulez être correct, il y a une constante".séparateur", qui détient les systèmes d'exploitation séparateur.
Si vous souhaitez remplacer la barre oblique inverse " \ " dans une chaîne, n'oubliez pas que c'est un caractère d'échappement:
edit:
et rappelez-vous, la Chaîne est immuable.
ne va pas changer la chaîne, seul le retour d'une nouvelle chaîne avec les caractères remplacés.
char
version de.replace()
sera un peu plus efficace 🙂OriginalL'auteur Udo Klimaschewski
Si tout ce que vous voulez faire est d'être en mesure d'accéder à un fichier avec un nom relatif à un certain répertoire, vous pouvez simplement utiliser de la plaine Fichier API, comme ceci:
Il devrait fonctionner sur Unix et Windows, depuis Windows accepte à la fois les Unix et Windows - style chemins (juste dire à partir de ma propre expérience).
OriginalL'auteur ShyJ