Plate-forme indépendante de chemins en Java
Je sais que le chemin relatif d'un fichier et que vous souhaitez traiter comme un File
objet à la fois Linux et Windows.
Quelle est la meilleure façon de spécifier indépendant de la plate-chemins en Java?
Vous devez vous connecter pour publier un commentaire.
La
File
classe contient le public et les membres que vous pouvez utiliser pour la plate-forme de fichier spécifique chemins:pathSeparator
dans ma demande, mais sur OS X, c'est un signe deux-points (:
). Si vous jeter dans un chemin de fichier, OS X va l'interpréter comme un caractère barre oblique dans le nom du dossier. ex: au Lieu de créer un dossier nomméfoo
sur le bureau de l'utilisateur, par accident, j'ai créé un dossier littéralement nomméDesktop/foo
de l'utilisateur maison dossier. En utilisant un simple barre oblique (/
) fonctionne exactement comme prévu, cependant.pathSeparator
etpathSeparatorChar
consulter le séparateur utilisé dans le système dePATH
variable. La question est de savoir en se référant à des chemins d'accès, pas de laPATH
variable. Ainsi,separator
etseparatorChar
doit être utilisé.Suffit d'utiliser
/
. Je l'ai utilisé pendant 22 ans. Jamais un problème./
doit être toujours en sécurité dans Java.Update
et vu les motsNow, I'm sure I've seen it documented
de réponse. Donc je pense qu'elle doit être vrai. Je rencontre ce problème aujourd'hui et trouvé des réponses dans la. Et vous, et que DONC, la réponse m'aider à résoudre ce problème. Je ne veux pas de downvotes dans ce anser, dans la mesure où je sais que vous êtes de droite./
seulement dans des cas spécifiques. Si vous avez besoin de comparer les différents chemins, alors vous pouvez avoir besoin de convertir les différents séparateurs à un unifiée, afin d'obtenir des résultats corrects. Par exemple:Paths.get("a/b").equals(Paths.get("a\\b"))
rendementsfalse
résultat (même avec la méthode compareTo, ne renvoie pas 0), en attendant le suivant:Paths.get("a/b").equals(Paths.get("a/b"))
retournetrue
. Compte tenu de cet exemple, je déconseille vivement l'utilisation de/
séparateur, puisque l'on peut de façon inattendue casser votre code d'interopérabilité entre les plates-formes.Paths.get("a/b").resolve("c")
sur Windows, entraînera `a/b\c' qui va travailler avec l'ouverture de Fichiers, et d'autres cas d'utilisation, mais dans l'égalité des tests, encore pourrait entraîner des bugs./
est le unified un". Pas un "cas particulier'.Vous pouvez utiliser n'importe quel séparateur de chemin en Java, il fonctionne sur Unix et Windows.
Si vous voulez continuer à utiliser le système de séparateur de chemin il y a la
Fichier.séparateur
propriété qui vous donnera le droit selon l' actuel système.Pour le root, vous pouvez utiliser
listRoots()
qui vous donne un tableau de la racine, il n'y aura qu'un seul élément sur les systèmes Unix, et autant que vous avez des disques sur Windows.Vous pouvez utiliser le champ statique de Fichier.séparateur pour récupérer la plate-forme spécifique caractère séparateur pour les chemins de fichier
Java est assez intelligent sur les chemins dans le Fichier des objets. Je viens de l'utiliser quelque chose comme "../foo/bar" et cela fonctionne dans les deux plates-formes plus MacOSX.
java 7 prend également en charge l'utilisation de
Chemins
iciVous peut alors obtenir un fichier en l'appelant:
Personnellement, j'aime utiliser le Chemin d'accès de la classe à partir d'Eclipse pour la manipulation des chemins en général, que vous pouvez simplement utiliser autonome avec quelques modifications comme il est tout à fait isolée.
http://grepcode.com/file/repository.grepcode.com/java/eclipse.org/3.5/org.eclipse.equinox/common/3.5.0/org/eclipse/core/runtime/Path.java/?v=source