Créer un chemin à partir de String en Java7

280

Comment puis-je créer un java.nio.file.Pathobjet à partir d'un Stringobjet dans Java 7?

C'est à dire

String textPath = "c:/dir1/dir2/dir3";
Path path = ?;

?est le code manquant qui utilise textPath.

mat_boy
la source

Réponses:

454

Vous pouvez simplement utiliser la Pathsclasse:

Path path = Paths.get(textPath);

... en supposant que vous souhaitiez utiliser le système de fichiers par défaut, bien sûr.

Jon Skeet
la source
Existe-t-il un moyen pour que cela fonctionne avec un chemin relatif et un chemin complet? c'est-à-dire donner un chemin par rapport à l'endroit où se trouve le projet ou l'exe?
shinzou
@kuhaku: Je pense que vous devriez poser une nouvelle question avec des détails sur ce que vous essayez de faire et ce que vous avez essayé.
Jon Skeet du
@ JonSkeet est Path.get()indépendant de la plateforme? ce qui signifie que ce Path.get("lib","p2") sera comme lib\p2sous Windows et lib/p2sous linux
Kasun Siyambalapitiya
1
@KasunSiyambalapitiya: Oui, ça devrait aller comme ça.
Jon Skeet
1
@JonSkeet Paths.get ("/ opt / path /"); Il renvoie "\ opt \ path \". Pouvez-vous s'il vous plaît fournir la solution.
deadend
18

Depuis les javadocs .. http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

Path p1 = Paths.get("/tmp/foo"); 

est le même que

Path p4 = FileSystems.getDefault().getPath("/tmp/foo");

Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java"));

Path p5 = Paths.get(System.getProperty("user.home"),"logs", "foo.log"); 

Sous Windows, crée le fichier C: \ joe \ logs \ foo.log (en supposant que la maison de l'utilisateur est C: \ joe)
Sous Unix, crée le fichier /u/joe/logs/foo.log (en supposant que la maison de l'utilisateur est / u / joe)

Karthik Karuppannan
la source
6
Je suggère d'utiliser File.separaratorau lieu de prendre soin du système d'exploitation actuel. Par exemple, "/tmp/foo"estFile.separator+"tmp"+File.separator+"foo"
mat_boy
Je suppose que cela ne crée pas le fichier réel, mais cela crée un objet Path. Vous pouvez utiliser l'objet chemin pour créer le fichier réel sur le disque, à l'aide de Files.createFile (logfilePath).
Mr.Q
12

Si possible, je suggère de créer le Pathdirectement à partir des éléments du chemin:

Path path = Paths.get("C:", "dir1", "dir2", "dir3");
// if needed
String textPath = path.toString(); // "C:\\dir1\\dir2\\dir3"
sevenforce
la source
cette plateforme est-elle indépendante?
Kasun Siyambalapitiya
7

Même lorsque la question concerne Java 7, je pense que cela ajoute de la valeur de savoir qu'à partir de Java 11, il existe une méthode statique en Pathclasse qui permet de le faire immédiatement:

Avec tout le chemin dans une chaîne:

Path.of("/tmp/foo");

Avec le chemin décomposé en plusieurs chaînes:

Path.of("/tmp","foo");

Arcones
la source
2
Enfin, ils ont fourni cette méthode!
mat_boy
@mat_boy ouais mais ce n'est pas grave, vraiment. La méthode existait déjà dans Java 7, sauf qu'elle était précédemment appelée Paths.get.
DodgyCodeException