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.

mat_boy
fonte

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.

Jon Skeet
fonte
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)

Karthik Karuppannan
fonte
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"
sevenforce
fonte
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");

Arcones
fonte
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