Java7で文字列からパスを作成する


280

Java 7のjava.nio.file.Pathオブジェクトからオブジェクトを作成するにはどうすればよいStringですか?

すなわち

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

どこ?その用途欠落しているコードがありますtextPath

回答:


454

あなたはPathsクラスを使うことができます:

Path path = Paths.get(textPath);

...もちろん、デフォルトのファイルシステムを使用することを想定しています。


これが相対パスと完全パスで機能する方法はありますか?つまり、プロジェクトまたは実行ファイルの場所を基準とした相対パスを指定しますか?
しんぞう2016

@kuhaku:何をしようとしているのか、何を試したのかについて、新しい質問をするべきだと思います。
Jon Skeet

@JonSkeetはPath.get()プラットフォームに依存しませんか?WindowsとLinuxのPath.get("lib","p2") 場合と同様の意味lib\p2lib/p2
Kasun Siyambalapitiya '22

1
@KasunSiyambalapitiya:はい、それはそのように大丈夫です。
Jon Skeet 2017年

1
@JonSkeet Paths.get( "/ opt / path /"); 「\ opt \ path \」として返されます。解決策を提供していただけますか。
デッドエンド'27

18

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

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

と同じです

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では、ファイルC:\ joe \ logs \ foo.logを作成します (ユーザーのホームをC:\ joeと想定)
UNIXでは、ファイル /u/joe/logs/foo.log(ユーザーのホームを/ u / joeと想定)


6
File.separarator現在のOSを処理する代わりに使用することをお勧めします。例えば、"/tmp/foo"あるFile.separator+"tmp"+File.separator+"foo"
mat_boy

実際のファイルは作成されませんが、Pathオブジェクトが作成されます。パスオブジェクトを使用すると、Files.createFile(logfilePath)を使用してディスク上に実際のファイルを作成できます。
Mr.Q、

12

可能であればPath、パス要素から直接作成することをお勧めします:

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

このプラットフォームは独立していますか?
Kasun Siyambalapitiya

7

Java 7に関する質問であっても、Java 11以降、Pathクラスに静的メソッドがあり、これをすぐに実行できることを知っておくと価値があると思います。

すべてのパスを1つの文字列に含めます。

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

パスをいくつかの文字列に分解すると:

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


2
最後に、彼らはこの方法を提供しました!
mat_boy

@mat_boyええ、でもそれは大したことではありません。このメソッドは、以前呼び出されていたことを除いて、Java 7にはすでに存在していましたPaths.get
DodgyCodeException
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.