Criar um caminho a partir de String no Java7


280

Como posso criar um java.nio.file.Pathobjeto a partir de um Stringobjeto no Java 7?

Ou seja,

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

Onde ?está o código ausente que usa textPath.

Respostas:


454

Você pode apenas usar a Pathsclasse:

Path path = Paths.get(textPath);

... supondo que você queira usar o sistema de arquivos padrão, é claro.


Existe uma maneira de isso funcionar com o caminho relativo e o caminho completo? ou seja, dando um caminho em relação a onde o projeto ou exe está?
Shinzou

@kuhaku: Eu acho que você deveria fazer uma nova pergunta com detalhes do que você está tentando fazer e do que você tentou.
Jon Skeet

@JonSkeet é Path.get()independente de plataforma? o que significa que Path.get("lib","p2") será como lib\p2no Windows e lib/p2no Linux
Kasun Siyambalapitiya

1
@KasunSiyambalapitiya: Sim, deve ficar bem assim.
Jon Skeet

1
@JonSkeet Paths.get ("/ opt / path /"); Ele retorna como "\ opt \ path \". Você pode fornecer a solução.
deadend

18

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

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

é o mesmo 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"); 

No Windows, cria o arquivo C: \ joe \ logs \ foo.log (assumindo a origem do usuário como C: \ joe)
No Unix, cria o arquivo /u/joe/logs/foo.log (assumindo a origem do usuário como / u / joe)


6
Sugiro usar em File.separaratorvez de cuidar do sistema operacional atual. Por exemplo, "/tmp/foo"éFile.separator+"tmp"+File.separator+"foo"
mat_boy 12/09

Eu acho que ele não cria o arquivo real, mas cria um objeto Path. Você pode usar o objeto path para criar o arquivo real no disco, usando Files.createFile (logfilePath).
Mr.Q

12

Se possível, eu sugeriria a criação Pathdireta dos elementos do caminho:

Path path = Paths.get("C:", "dir1", "dir2", "dir3");
// if needed
String textPath = path.toString(); // "C:\\dir1\\dir2\\dir3"

esta plataforma é independente?
Kasun Siyambalapitiya

7

Mesmo quando a pergunta é sobre o Java 7, acho que agrega valor saber que, a partir do Java 11, existe um método estático na Pathclasse que permite fazer isso imediatamente:

Com todo o caminho em uma String:

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

Com o caminho dividido em várias seqüências de caracteres:

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


2
Finalmente, eles forneceram esse método!
mat_boy

@mat_boy sim, mas não é grande coisa, realmente. O método já existia no Java 7, exceto pelo fato de ter sido chamado anteriormente Paths.get.
DodgyCodeException
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.