2013-02-03 5 views
8

メソッドFileLocator.resolve(url)を使用して、bundleentry://something/somewhere/x.txtのアドレスを/mnt/foo/somewhere/x.txtの適切なファイルURLに変換することができます。FileLocator.resolve(url)のエスケープ結果

ただし、https://bugs.eclipse.org/bugs/show_bug.cgi?id=145096にも記載されていますが、URLはエスケープされません。例として、参照されたバンドルを含むEclipseのインストールがスペースを含むディレクトリーにある場合、FileLocator.resolveによって戻されたURLにはスペースが含まれており、そのためにurl.toURI()が呼び出されません。

  • 手動でエスケープするにはどうすればいいですかすべてのURLに必要な文字はありますか?
  • バンドルに関連するパスに基づいてFileオブジェクトを取得するにはどうすればよいですか?参考として

、ここではそのファイルがスペースを含むディレクトリにある場合は、私のプラグインの.jarファイル内のディレクトリdirを検索しようとしたときに失敗したコードは次のとおりです。

final IPath pathOfExampleProject = new Path("dir"); 
    final Bundle bundle = Platform.getBundle(AproveIDs.PLUGIN_ID); 
    final URL url = FileLocator.find(bundle, pathOfExampleProject, null); 
    final URL url2 = FileLocator.toFileURL(url); 
    url2.toURI(); // Illegal character in path at index [...] 

答えて

1

二つの追加の注意事項:

  • FileLocator.resolveは確かにURLを解決しますが、それは必ずしもファイル戻りません:/ URLを。バンドルがパックされているデフォルトの場合(.jar)、FileLocator.toFileURLを使用する必要があります.FileURLは、必要に応じて自動的にリソースをキャッシュに抽出します。
  • のEclipse 4.xのは、現在デフォルトでEMF共通のAPIが含まれているので、あなたは次のようにEMFのURIのAPIをより簡単にURLをエスケープすることができます、

URI resolvedUri = URI.createFileURI(resolved.getPath());

は、ファイル名を取得するにはresolvedUri.toFileString();

を呼び出します
関連する問題