# Filelocator



## noisebreath (15. Jun 2009)

Hi 
hab einen code im netz gefunden der die schritte beschreibt wie man ein file in einem bundle ansprechen kann:

```
private static final String OWLExtraction = "OWLExtraction";
	//ResourceBundle bundle =  ResourceBundle.getBundle(OWLExtraction);
	Bundle bundle =  Bundle.getBundle(OWLExtraction);
	URL fileURL = FileLocator.find(bundle, "text2onto.properties", null);
	InputStream in = fileURL.openStream();
```

Bei mir meckert er bei FileLocator. Er bietet mir keinen import oder so an. Daher gehe ich mal stark davon aus dass der Code Falsch ist.. wobei ich die sache mit dem filelocator hier im forum öfters gesehen habe. er (eclipse) kennts aber wohl nicht.. kann mir jemand sagen was ich hier verbessern muss dass es klappt?

achja der Originalcode stammt von hier. hab ihn ein wenig angepasst weil Platform z.b. nichtmal getBundle hatte..

FAQ How do I find out the install location of a plug-in? - Eclipsepedia


----------



## Sempah (15. Jun 2009)

Wenn Eclipse etwas nicht kennt, hast du es womöglich nicht (korrekt) eingebunden.


----------



## noisebreath (15. Jun 2009)

er bietet mir ja keinen import an um es einzubinden.. ist das von einer externen lib vielleicht?


----------



## noisebreath (15. Jun 2009)

oki also, innerhalb eines plugin kann ich importieren aber nicht innerhalb eines javaprojects. wie kann ich einen relativen pfad innerhalb eines java projects machen. 

die sache ist die: aus dem java project mache ich eine jar die ich in mein plugin einbinde. dieses verweist innerhalb auf einen pfad den ich eben gerne auf den pfad des plugins setzen will weil ich in der plugin directory die gewollte properties file habe. 
wie kann ich da bewerkstelligen wenn ich den flelocator nicht benutzen kan ninnerhalb des java projects?


----------



## maki (15. Jun 2009)

> die sache ist die: aus dem java project mache ich eine jar die ich in mein plugin einbinde.


Wenn du mit "eine jar machen" nicht "ein OSGi Bundle machen" bzw. "ein Eclipse Plugin machen" meinst, dann bist du komplett auf dem Holzweg.


----------



## noisebreath (15. Jun 2009)

dann bin ich wohl auf dem holzweg. das heisst ich muss daraus ein plugin machen um den pfad relativ zu holen? mit nem einfachen jar gehts nicht?


----------



## maki (15. Jun 2009)

"komplett auf dem Holzweg" muss ich relativieren.

Wenn deine jar von einem OSGi bundle/Eclipse Plugin genutzt werden soll, wäre es am sinnvollsten daraus ein OSGi Bundle bzw. ein Eclipse Plugin zu machen.

Aber... ich verstehe immer noch nicht was du vorhast...
Wer soll jetzt das Property File lesen?
Die jar?
Dein plugin?
Irgendetwas anderes?


----------



## Wildcard (15. Jun 2009)

Dir fehlt wohl org.eclipse.core.runtime als Bundle Dependeny. EInfach im Manifest eintragen.
*verschieb*


----------



## noisebreath (15. Jun 2009)

also mein jar greift auf eine properties file zu. das jar wiederum wird von einem plugin eingebunden.
Also war letztlich meine Frage, kann ich Pfade in einem Jar so relativ schreiben(wenn  ja wie?), dass diese dann eingebunden in einem plugin auch funktionieren?
scheinbar wohl nicht. jedenfalls nicht über den filelocator so wie ich das verstanden habe.


----------



## dzim (16. Jun 2009)

FileLocator ist - das kann ich wohl behaupten - nur für das Suchen von Dateien in Bundles gedacht (unabhängig ob sie als Verzeichnis oder jar vorliegen). Da du das allerdings ausserhalb des BundleKontextst nutzen willst, weiß ich nicht, wie sinnvoll das Ganze ist.
Wenn du den Pfad kennst, warum suchen?
Wenn du nur in Jars bist, nimm die JarApi und lass dir den entsprechenden Eintrag des Jars als Stream geben.
Wenn du es in Bundles machst


```
File statisticsPropertiesFile = new File(FileLocator.toFileURL(
					StatisticsActivator.getDefault().getBundle()
							.getEntry(STATISTICS_PROPERTIES_BUNDLE_PATH))
					.getFile());

			statisticsProperties = new Properties();
			statisticsProperties.load(new FileReader(statisticsPropertiesFile));
```

so hab ich das gemacht eine interne property Datei gelesen. STATISTICS_PROPERTIES_BUNDLE_PATH ist dabei der relative Pfad innerhalb des Bundles zur Datei... Nur so als Tipp.
Vielleicht könnte man es schöner und besser machen, das oben genannte ist halt mein derzeitiger Stand des Wissens.


----------

