web-dev-qa-db-ja.com

Java:エスケープされたURLからファイルを取得する方法は?

ローカルファイルの場所を特定するURLを受け取っています(URLを受け取っているという事実は自分で制御できません)。 RFC2396で定義されているように、URLは有効にエスケープされます。これをJava Fileオブジェクトに変換するにはどうすればよいですか?

面白いことに、URL getFile()メソッドはFileではなくStringを返します。

「/ tmp/some dir」(「some」と「dir」の間にスペーシング文字を含む)というディレクトリを作成しました。このディレクトリは、「file:/// tmp/some%20dir」によって正しく配置されています(明確にするために引用符を追加)。

そのURLをJavaファイルに変換するにはどうすればよいですか?

私の問題の詳細を説明するために、次の例ではfalseが出力されます。

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile() );
System.out.println( "Does dir exist? " + f.exists() );

次の( "%20"を手動でスペースに置き換える)はtrueを出力します:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile().replaceAll( "%20", " " ) );
System.out.println( "Does dir exist? " + f.exists() );

私はwhyを尋ねていないことに注意してください最初の例はfalseも印刷しません(whyhackyreplaceAllを使用する2番目の例はtrueを出力します。エスケープされたURLをJava =ファイルオブジェクト。

[〜#〜] edit [〜#〜]:ありがとう.

愚かなことに、URLクラス自体の中にヘルパーメソッドを探していました。

以下は、Java URLからJava File:

URL url = new URL( "file:///home/nonet/some%20dir" );
File f = new File( URLDecoder.decode( url.getFile(), "UTF-8" ) );
45
SyntaxT3rr0r
URLDecoder.decode(url);//deprecated
URLDecoder.decode(url, "UTF-8"); //use this instead

関連する質問を参照してください JavaでURLをエスケープ解除する方法

20
Cesar

FileURL#toURI() と組み合わせて使用​​する---(URIコンストラクター:

URL url = getItSomehow();
File file = new File(url.toURI());
66
BalusC

このようなPaths.get(url.toURI()).toFile()は、Java 7.で始まる7が最適です。 Converting Java file:// URL to File(...)パス、プラットフォームに依存しない、UNCパスを含む

6
vorburger