Java7'de Dizeden Yol Oluşturma


280

Java 7'de java.nio.file.Pathbir Stringnesneden nasıl nesne oluşturabilirim ?

yani

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

?kullanılan eksik kod nerede textPath.

Yanıtlar:


454

Sadece Pathssınıfı kullanabilirsiniz :

Path path = Paths.get(textPath);

... varsayılan dosya sistemini kullanmak istediğinizi varsayarsak.


Bunun göreli yol ve tam yolla çalışmasının bir yolu var mı? yani proje ya da exe göre bir yol vermek?
shinzou

@kuhaku: Sanırım ne yapmaya çalıştığın ve ne denediğin hakkında yeni bir soru sormalısın.
Jon Skeet

@JonSkeet Path.get()platformdan bağımsız mıdır? yani Path.get("lib","p2") gibi olacaktır lib\p2Windows ve lib/p2linux
Kasun Siyambalapitiya

1
@KasunSiyambalapitiya: Evet, böyle iyi olmalı.
Jon Skeet

1
@JonSkeet Paths.get ("/ opt / path /"); "\ Opt \ path \" olarak döner. Lütfen çözümü sağlayabilir misiniz?
deadend

18

Javadocs'tan .. http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

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

aynıdır

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"); 

Windows'da C: \ joe \ logs \ foo.log dosyası oluşturur (kullanıcı evini C: \ joe olarak varsayarsak)
Unix'te /u/joe/logs/foo.log dosyası (kullanıcı evini / u / joe olarak varsayarsak) oluşturur


6
File.separaratorMevcut işletim sistemine bakmak yerine kullanmanızı öneririm . Örn "/tmp/foo"olduğunuFile.separator+"tmp"+File.separator+"foo"
mat_boy

Sanırım gerçek dosyayı oluşturmaz, ama bir Path nesnesi oluşturur. Files.createFile (logfilePath) öğesini kullanarak diskte gerçek dosyayı oluşturmak için yol nesnesini kullanabilirsiniz.
Mr.Q

12

Mümkünse Pathdoğrudan yol öğelerinden oluşturmayı öneririm :

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

Bu platform bağımsız mı?
Kasun Siyambalapitiya

7

Soru Java 7 ile ilgili olduğunda bile, Java 11'den itibaren Pathsınıfta bunu hemen yapmanıza izin veren statik bir yöntem olduğunu bilmek için değer kattığını düşünüyorum :

Tek bir String'deki tüm yolla:

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

Yol birkaç Dizede ayrılmış olarak:

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


2
Sonunda bu yöntemi sağladılar!
mat_boy

@mat_boy evet ama gerçekten önemli değil. Yöntem, daha önce çağrılmış olması dışında, Java 7'de zaten vardı Paths.get.
DodgyCodeException
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.