2013-02-03 8 views
8

Metoda FileLocator.resolve(url) może zostać użyta do przetłumaczenia adresu bundleentry://something/somewhere/x.txt na właściwy URL pliku dla /mnt/foo/somewhere/x.txt.Wynik Escape pliku FileLocator.resolve (url)

Jednak, co jest również udokumentowane pod numerem https://bugs.eclipse.org/bugs/show_bug.cgi?id=145096, adres URL nie jest unikany. Na przykład, jeśli instalacja Eclipse zawierająca wspomniany pakunek znajduje się w katalogu zawierającym spację, adres URL zwrócony przez FileLocator.resolve nadal zawiera przestrzeń i wywołanie kończy się niepowodzeniem z powodu tego.

  • W jaki sposób mogę ręcznie uciec wszystkie niezbędne znaki w adresie URL?
  • Jak mogę uzyskać obiekt File oparty na ścieżce względem aktualnego pakietu ?

Jako odniesienia, tutaj jest kod, który nie powiedzie się, gdy próbuje znaleźć katalog dir wewnątrz mojego pluginu .jar pliku, jeśli plik ten znajduje się w katalogu zawierającym miejsca:

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 [...] 

Odpowiedz

1

Dwa dodatkowe uwagi:

  • FileLocator.resolve rzeczywiście rozwiązuje URL, ale niekoniecznie zwracają plik/URL. W domyślnym przypadku, w którym pakiet jest spakowany (w pliku .jar), należy użyć pliku FileLocator.toFileURL, który w razie potrzeby automatycznie wyodrębni zasób do pamięci podręcznej.
  • od Eclipse 4.x obejmuje teraz wspólne EMF API domyślnie można uciec URL prościej z EMF URI API następująco:

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

Aby uzyskać nazwę pliku, zadzwoń resolvedUri.toFileString();