ローカルファイルの場所を特定する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" ) );
URLDecoder.decode(url);//deprecated
URLDecoder.decode(url, "UTF-8"); //use this instead
関連する質問を参照してください JavaでURLをエスケープ解除する方法
File
を URL#toURI()
と組み合わせて使用する---(URI
コンストラクター:
URL url = getItSomehow();
File file = new File(url.toURI());
このようなPaths.get(url.toURI()).toFile()
は、Java 7.で始まる7が最適です。 Converting Java file:// URL to File(...)パス、プラットフォームに依存しない、UNCパスを含む 。