Je cherche à écrire et à lire des fichiers texte dans et depuis (respectivement) un répertoire différent de celui de mon programme. Lorsque je spécifie un répertoire dans lequel écrire ou lire, dois-je utiliser des barres obliques ou des barres obliques inverses pour identifier un chemin de fichier?
L'utilisation de barres obliques rend le système indépendant. Je m'en tiendrai à cela pour plus de simplicité.
Pensez à utiliser Java.io.File.separator
si vous affichez le chemin d'accès à l'utilisateur. Vous préférez ne pas surprendre les utilisateurs de Windows. Ils sont un peu nerveux.
Je ne l'ai jamais trouvé documenté nulle part, mais les classes JDK vous permettent d'utiliser des barres obliques, que vous soyez sous Windows ou non. (Vous pouvez le voir dans la source JDK, où il convertit explicitement les séparateurs de chemin pour vous.)
Officiellement - et certainement dans votre interface utilisateur - vous devriez utiliser la file.separator
propriété système , disponible via System.getProperty
(la liste des propriétés système standard est documentée dans la documentation pour System.getProperties
):
String sep = System.getProperty("file.separator");
... et aussi via les champs static
Ils sont également disponibles en tant que File.separator
(et File.separatorChar
).
Vous pouvez également utiliser les différentes fonctionnalités de la Java.io.File
classe pour combiner et diviser des chemins, et/ou les diverses fonctionnalités des interfaces et des classes dans Java.nio.file
.
Vous pouvez utiliser soit.
Si vous utilisez /
, vous n'avez besoin que d'une seule barre oblique.
Si vous utilisez \
, vous devez utiliser \\
. C'est-à-dire que vous devez y échapper.
Vous pouvez également utiliser la méthode resolve()
de la classe Java.nio.Path
pour ajouter des répertoires/fichiers au chemin existant. Cela évite d'avoir à utiliser des barres obliques. Vous pouvez ensuite obtenir le chemin absolu en appelant la méthode toAbsolutePath()
suivie de toString()
.
SSCCE:
import Java.nio.file.Path;
import Java.nio.file.Paths;
public class PathSeperator {
public static void main(String[] args) {
// the path seperator for this system
String pathSep = System.getProperty("path.separator");
// my home directory
Path homeDir = Paths.get(System.getProperty("user.home"));
// lets print them
System.out.println("Path Sep: " + pathSep);
System.out.println(homeDir.toAbsolutePath());
// as it turns out, on my linux it is a colon
// and Java is using forward slash internally
// lets add some more directories to the user.home
homeDir = homeDir.resolve("Eclipse").resolve("configuration");
System.out.println("Appending more directories using resolve()");
System.out.println(homeDir);
}
}
Tu devrais utiliser /
Par exemple C:/User/...