2011-01-18 9 views

Odpowiedz

8

Aktualizacja (styczeń 2012)
James Moore wspomina w the comments że Pytania i API są dość stare.

FileLocator.resolve(URL) jest teraz preferowany w stosunku do wycofanego Platform.resolve().

Jako this example pokazy, trzeba zdać rzeczywistej zasobu (tutaj bundle) nie nazwę zasobu, aby go rozwiązać:

private static URI locateFile(String bundle, String fullPath) { 
    try { 
    URL url = FileLocator.find(Platform.getBundle(bundle), new Path(fullPath), null); 
    if(url != null) 
     return FileLocator.resolve(url).toURI(); 
    } catch (Exception e) {} 
    return null; 
    } 
} 

Patrz także „How to refer a file from jar file in eclipse plugin” więcej.


Original odpowiedź (styczeń 2011)

Może FAQ "How do I find out the install location of a plug-in?" może pomóc tutaj:

Należy ogólnie unikać założenia o lokalizacji plug-in w czasie wykonywania.
Aby znaleźć zasoby, takie jak obrazy, które są przechowywane w katalogu instalacyjnym wtyczki, można użyć adresów URL podanych w klasie Platform. Te adresy URL używają specjalnego protokołu Eclipse Platform, ale jeśli używasz ich tylko do odczytu plików, nie ma to znaczenia.

w Eclipse 3.1 i wcześniejszych, następujący fragment otwiera strumień wejściowy na pliku o nazwie sample.gif znajdujący się w podkatalogu o nazwie icons, z plug-in ZAINSTALUJ katalogu:

Bundle bundle = Platform.getBundle(yourPluginId); 
    Path path = new Path("icons/sample.gif"); 
    URL fileURL = Platform.find(bundle, path); 
    InputStream in = fileURL.openStream(); 

Jeśli musisz znać lokalizację systemu plików wtyczki, musisz użyć Platform.resolve(URL). Ta metoda przekształca URL platformy na standardowy protokół URL, taki jak HyperText Transfer Protocol (HTTP) lub plik.
Należy zauważyć, że platforma Eclipse nie określa, że ​​wtyczki muszą istnieć w lokalnym systemie plików, więc nie można polegać na tym, że ta metoda zwróci adres URL systemu plików we wszystkich okolicznościach w przyszłości.

w Eclipse 3.2, preferowaną metodą wydaje się być:

Bundle bundle = Platform.getBundle(yourPluginId); 
    Path path = new Path("icons/sample.gif"); 
    URL fileURL = FileLocator.find(bundle, path, null); 
    InputStream in = fileURL.openStream(); 
+0

Dzięki za wyżej, ale mam wątpliwości Rozważam, że mam projekt wtyczki o nazwie com.abhishek.html.test, aw nim mam folder o nazwie html zawierający kilka plików html. Teraz chcę przeczytać te html w plug-in, a następnie, które podejście powinienem wykonać. Lokalnie działa, ale jak wtyczka wykryje folder o nazwie html? –

+0

@ Abhishek: Nie jestem pewien co do "lokalnie działa". W przeciwieństwie do konfiguracji? Ponieważ twój program powinien być w stanie wykryć folder 'html' w wtyczce, pobierając pakiet i używając' FileLocator'. Powinien zwrócić wartość null (lub wyrzucić wyjątek, zapomniałem którego), jeśli 'html' nie istnieje w tej wtyczce. – VonC

+1

To wpis w FAQ jest okropny. 3.[1,2] są stare - dlaczego nie mówić o najnowszych wydawnictwach? Zaleca użycie platformy Platform.resolve, ale Platform.resolve jest oznaczone jako "Przestarzałe, użyj zamiast tego FileLocator.resolve (URL)" I dlaczego na świecie jest często zadawane pytanie mówiące coś w stylu "preferowana metoda wydaje się być"? Po co kwalifikować się przy użyciu tak wymyślnego języka? –

0

Użyj poniższego kodu, aby uzyskać ścieżkę wtyczki:

this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); 
+0

jaka klasa to ten "obiekt"? – emecas

+0

to - obiekt klasy zdefiniowany przez użytkownika W którym powyższy kod jest używany. jeśli masz klasę Myclass.java, powyższy kod może być użyty tak jak "Myclass.class.getClass(). getProtectionDomain(). getCodeSource(). getLocation(). getPath();" – Vel

Powiązane problemy