filelocator absolutepath

Status
Nicht offen für weitere Antworten.

noisebreath

Bekanntes Mitglied
Hi,

ich hab mit diesem Code versucht den filelocator zu benutzen:

Code:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;


	/**get text2onto.properties location*/
	static Bundle bundle = Platform.getBundle("text2Onto");
	static Path path = new Path("ressource/text2onto.properties");
	static URL fileURL = FileLocator.find(bundle, path, null);
	static String a = fileURL.toString();
	System.out.println(a);

Die Ausgabe ist : bundleentry://747/ressource/text2onto.properties

auch "static String a = fileURL.getPath().toString();" gibt mir nur die ausgabe :

/ressource/text2onto.properties

Ich brauch aber den absoluten Pfad.. kann mir einer sagen wie ich an den komme?

lg
noise
 

Tobias

Top Contributor
wahrscheinlich. Allerdings könnte ich mir durchaus vorstellen, dass es keinen absoluten Pfad gibt, weil deine Datei innerhalb eines JARs liegt und die Ordnerhierachie dort eben mit "/resources" startet. Ist aber nur eine Vermutung.
 

noisebreath

Bekanntes Mitglied
es muss doch möglich sein den pfad des bundles zu bekommen z.b: C:\workspace\plugin\ressource etc...
oder nicht?
 

Michael...

Top Contributor
Versuchs über getResource(). Eventuell so:
Code:
System.out.println(bundle.getClass().getResource("ressource/text2onto.properties"));
oder so:
Code:
System.out.println(bundle.getClass().getResource("/ressource/text2onto.properties"));
 

Chumax

Aktives Mitglied
Java:
String path = new File("ressource/text2onto.properties").getAbsolutePath();

Bin mir aber nicht sicher, ob es das ist was du suchst.
 

noisebreath

Bekanntes Mitglied
ne ich denke nicht. wenns geht sollte denke ich jetzt doch jemand diesen post ins plattformprogrammierungsthread schieben.. denke nicht dass es hierher gehört.


auch wenn ich versuche statt einen String die URL vom Code oben zu übergeben und über die uri ein file zu erzeugen geht das nicht:
Code:
	public static void load( URL fileURL) throws IOException, FileNotFoundException {
		System.out.println( "loading settings from file " + sFile );
		try {
			m_properties.load( new FileInputStream( new File( fileURL.toURI() ) ) );
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

bin da jetzt ein wenig überfragt er schmeisst dann natürlich:
"java.lang.IllegalArgumentException: URI scheme is not "file""

klare sache er hat ja nur die /ressource/text2onto.properties dadurch....
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Das kann nicht funktionieren. Dateien die in ein Jar verpackt wurden sind keine Dateien mehr, sondern jar entries. Die File API lässt sich aber, wie der Name schon sagt, nur auf Dateien anwenden.
Glücklicherweise ist die Java API allerdings flexibel genug um praktisch überall mit InputStreams zu arbeiten, du brauchst also kein File Handle
 

noisebreath

Bekanntes Mitglied
???
das ist kein jar und hat in meinen augen auch nichts mit nem jar zu tun.
das ist ein plugin, und innerhalb dieses plugins will ich einen FileInputStream auf ein File setzen, dass sich im unterordner ressource vom Plugin selber befindet.
Ich dachte genau dafür wäre FileLocator ?

lg
noise
 

Michael...

Top Contributor
In der Regel liegen Plugins (zumindes die, die ich kenne) als jar-Archiv vor.
Deswegen auch meine Anmerkung es mal mit getResource() zu versuchen.
 

noisebreath

Bekanntes Mitglied
also um da sproblem nochmal genau zu beschreiben. Ich hab ein file x aus dem ich lesen will. dieses file ist in einem Ordner ressource welches innerhalb meines Plugins liegt. Plugin liegt in Workspace und aus dem Src code des plugins will ich auf dieses file zugreifen. ich will den pfad relativ halten, dass falls jemand die platform bei sich zu hause aufsetzt um dran weiter zu programmieren nicht die pfade neu angepasst werden muessen (sein workspace kann ja sonstwo sein). Nun hatte man mier hier vor einiger zeit den filelocator vorgeschlagen. Das habe ich wie oben benutzt aber der locator kriegt wohl das file nicht so wie ich es erwartet habe. der pfad ist nicht erkennbar.. bzw schauts so aus, als ob es immer relativ zum bundle ist. das wäre auch nicht tragisch wenn mir jemand sagen könnte wie ich darüber einen stream aufs file machen kann.

lg
noise
 

noisebreath

Bekanntes Mitglied
also ich hab das jetzt wie vorgeschlagen mit dem Inputstream die sache gelöst:

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

		try {
			m_properties.load( in );
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
Hab den code grad so noch nicht ausprobiert, aber das sollte ja klappen :)
 

Wildcard

Top Contributor
Gleich angewöhnen: nur mit InputStreams arbeiten (wenn es um programminterne Resourcen geht).
Schön das es jetzt funktioniert...
 

noisebreath

Bekanntes Mitglied
Oki ich werds mir merken. das ist aber ein tool dass ich zu nem plugin gemacht hab, hab daher nicht die freiheiten auch jeden code zu ändern, weil das programm auch auf einige apis (jars) zugreift. daher die frage: ist es möglich mit dem filelocator irgendwie ein file zu erzeugen. also was ich damit meine ist, dass das programm auf eine funktion einer api zugreift die als parameter ein file übergeben bekommt ( function (new file("filepath")) und ich würde gerne verhindern, dass jeder der diese plattform bei sich zu hause aufsetzt diesen pfad explizit angeben muss. bisher sehe ich aber keine möglichkeit dazu, weil ich noch keine möglichkeit gefunden habe den absoluten pfad mit dem filelocator heraus zu kriegen. irgendwelche vorschläge?

lg noise
 

Wildcard

Top Contributor
Das Plugin wird als jar Deployed, das Jar selbst ist eine Datei, der Inhalt nicht, also greift auch die File API nicht. Die ist nämlich, wie der Name schon sagt, für Dateien geschrieben worden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben