Ausführbare Jar läd die Ressource nicht

Jinairu

Mitglied
Moin moin Leute,
ich hätte ein Problem mit dem laden einer Ressource. Es ist kein Bild, sondern ein .ods sheet (OpenOffice).

Ich habs einfach in Eclipse ins Package rein gezogen und aus der IDE geht es wie immer wunderbar.
Es wird mit in die Jar beim exportieren hinzugefügt nur ich komm irgendwie nicht dran :/

Meine Ordnerstruktur sieht somit so aus:

Projekt
--------------src
--------------->core(package)
--------------------->Cass1
--------------------->Class2
--------------------->WorkSheet.ods

Ich benutze zum bearbeiten der ODS JOpenDocument.

Hier mein letzter Versuch:
Java:
	SpreadSheet createFromFile = SpreadSheet.createFromFile(new File(
					getClass().getResource("./WorkSheet.ods").toURI()));
			Sheet sheet = createFromFile.getFirstSheet();

hab schon, verzweifelter weise, jede mir bekannte Variation von getClass().getRessource() und getClass().getClassLoader().getRessource() durch, sprich:
/../core/WorkSheet.ods/
./core/WorkSheet.ods
core/WorkSheet.ods
/WorkSheet.ods
WorkSheet.ods
(...) uvm.

Die Google suche war überraschend erfolglos, damit konnte ich nichts anfangen. Am besten wäre eine "universallösung" für weitere Projekte 🙂
Bei Bildern war das ganze ja kein Problem, aber hier dran scheitere ich.

Vielen Dank,
Viele Grüße,
Jin
 
Zuletzt bearbeitet:
Ich habe jetzt ehrlich gesagt nicht kappiert, welchen Pfad du jetzt tasächlich brauchst/willst. Gib die den Pfad mit deinem Logger oder in der Konsole aus, dann siehst du sofort wo die JVM deine Datei in der JAR sucht.
 
Zuletzt bearbeitet:
Sollte nicht "/core/WorkSheet.ods" funktionieren? Ohne Punkt mit führendem "/" für die absolute Angabe. Allerdings bin ich mir nicht sicher, ob du eine Datei aus einer JAR direkt für ein neues File-Objekt verwenden kannst (gibt es dabei keine Exception?). Evtl musst du die Datei erstmal zwischenspeichern.
Gruß
 
Vielen dank für eure Antworten.
@Ruzmanz
Ich weiß leider auch nicht, welchen Pfad ich brauche, bzw ob das so überhaupt klappt. Ich weiß nur, dass das, was ich bis jetzt probiert hab nicht funktioniert. Wie soll ich denn den Pfad einer Datei ausgeben lassen, die ich nicht ansteuern/finden kann. Meinst du, ich soll die Jar einlesen, die Files alle auflisten bzw nach deren Pfaden suchen?

@michaels
nein, leider funktioniert das nicht. Ich bekomme zwei unterschiedliche exceptions.
1. java.lang.IllegalArgumentException: URI is not hierarchical bei "/core/file.ods"
2. java.lang.NullPointerException bei "/file.ods"

Das interpretiere ich so, dass /file.ods ein treffer ist, er die aber nicht laden kann wie du schon gesagt hattest

#beim schreiben kam mir die Idee durch deinen Post:

Java:
	try {
			File tempfile = File.createTempFile("temp", ".ods");
			tempfile.deleteOnExit();
			InputStream is = Objects.requireNonNull(getClass()
					.getResourceAsStream("workSheet.ods"), "Nich da");
			OutputStream os = new FileOutputStream(tempfile);

			byte[] buffer = new byte[is.available()];
			int bytesRead;
			while ((bytesRead = is.read(buffer)) != -1) {
				os.write(buffer, 0, bytesRead);
			}
			os.close();

			SpreadSheet createFromFile = SpreadSheet.createFromFile(tempfile);

Nun hab ichs unter verschiedenen Umständen getestet und scheint gut zu funktionieren.

Vielen dank noch einmal für den Hinweis,

viele Grüße,
Jin
 
Zuletzt bearbeitet:

Zurück
Oben