190 votes

File.separator vs Slash dans les chemins

Quelle est la différence entre l'utilisation d' File.separator et une normale / dans un Chemin d'accès Java-Chaîne?

Contrairement à la double barre oblique inverse \\ indépendance de plate-forme ne semble pas être la raison, puisque les deux versions de travail sous Windows et Unix (corrigez-moi si je me trompe ici).

public class SlashTest {
 @Test
 public void slash() throws Exception {
  File file = new File("src/trials/SlashTest.java");
  assertThat(file.exists(), is(true));
 }

 @Test
 public void separator() throws Exception {
  File file = new File("src" + File.separator + "trials" + File.separator + "SlashTest.java");
  assertThat(file.exists(), is(true));
 }
}

Reformuler la question, si / fonctionne sur Unix et Windows, pourquoi devrait-on toujours utiliser souhaitez utiliser File.separator.

Je vous remercie.

303voto

Pointy Points 172438

Vous utilisez File.separator parce qu'un jour votre programme pourrait fonctionner sur une plate-forme développée dans un pays lointain, un pays de choses étranges et de personnes étranges, où les chevaux pleurent et les vaches font fonctionner tous les ascenseurs. Sur cette terre, les gens ont traditionnellement utilisé le caractère ":" comme séparateur de fichiers, et la JVM obéit à leurs souhaits de manière aussi consciencieuse.

232voto

T.J. Crowder Points 285826

Avec les bibliothèques Java pour gérer les fichiers, vous pouvez utiliser en toute sécurité / (slash, pas de barre oblique inverse) sur toutes les plates-formes. Le code de la bibliothèque gère la traduction de choses dans la plate-forme des chemins spécifiques en interne.

Vous pouvez utiliser File.separator dans l'INTERFACE utilisateur, cependant, car il est préférable de montrer aux gens ce qui va faire sens dans leurs OS, plutôt que ce qui fait sens pour Java.

Mise à jour: je n'ai pas été en mesure, à cinq minutes de recherche, pour trouver le "vous pouvez toujours utiliser une barre oblique" comportement documenté. Maintenant, je suis sûr que je l'ai vu documenté, mais en l'absense de trouver une référence officielle (car ma mémoire n'est pas parfaite), je collerais avec l'aide d' File.separator parce que vous savez que ce sera le travail.

27voto

Yishai Points 42417

Bien que l'utilisation de File.separator pour référencer un nom de fichier soit exagérée (pour ceux qui imaginent un pays lointain, j'imagine que leur implémentation JVM remplacerait un / avec un : le remplace par un \ ).

Cependant, il arrive que vous obteniez la référence de fichier, que vous ne la créiez pas et que vous deviez l'analyser. Pour pouvoir le faire, vous devez connaître le séparateur sur la plate-forme. File.separator vous aide à faire cela.

8voto

jpabluz Points 942

Eh bien, il y a plus de systèmes d'exploitation que Unix et Windows (appareils portables, etc.) et Java est connu pour sa portabilité. La meilleure pratique consiste à l'utiliser, afin que la JVM puisse déterminer laquelle est la meilleure pour ce système d'exploitation.

7voto

Bien que cela ne fasse pas beaucoup de différence sur le chemin, il le fait au retour.

Bien sûr, vous pouvez utiliser soit '/' ou '\' dans un nouveau fichier (chemin de chaîne), mais File.getPath () ne vous en donnera qu'un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X