# Bilder/Dateien aus package einlesen



## knowledge (20. Feb 2009)

Hallo,

wenn ich in einem Java Projekt verschiedene Dateien in einem Package abgelegt habe, z.B. icons usw. wie kann ich diese (Bilder) "adressieren"? Wenn ich z.B. das package de.test.bild habe in dem das Bild test1.jpg liegt bekomme ich es einfach nicht hin. Eine Datei "adressiere" ich normalerweise ja z.B. mittels C:\\test\\test.jpg (unter Windows). Wie ist das aber, wenn ich mein package anspreche?

Achso, ein Umwandlen in de\\test\\bild\\test.jpg bringt übrigens auch nichts.

BTW: MIt welcher Methode kann man die Betriebssystem abhängigen "Seperatoren" wie \\ für Windows usw. für den Dateipfad ermitteln


----------



## Leroy42 (20. Feb 2009)

knowledge hat gesagt.:


> wenn ich in einem Java Projekt verschiedene Dateien in einem Package abgelegt habe, ...



Dann hast du Pech gehabt: Resourcen haben in einem package nichts verloren 



knowledge hat gesagt.:


> BTW: MIt welcher Methode kann man die Betriebssystem abhängigen "Seperatoren" wie \\ für Windows usw. für den Dateipfad ermitteln



_getSeparator()_


----------



## knowledge (20. Feb 2009)

danke für die antwort. wenn ich in meinem programm aber eine art "bibliothek" brauche, in die ich bilder usw. ablegen und laden kann unabhängig von einer bestimmten position? d.h. z.B. wenn ich die Applikation verteile per jar sollen sich die bilder ebenfalls mit drin befinden, damit mein code diese nutzen kann.

vorschläge?


----------



## Wildcard (20. Feb 2009)

```
getClass().getResource(AsStream)("/dein/package/deinBild.gif");
```


----------



## Quaxli (21. Feb 2009)

Falls der Code von Wildcard Probleme macht, lass den ersten Schrägstrich "/" weg. Ich hatte an der Stelle mal Problem und gebe das erste Verzeichnis immer ohne / an. Bin aber nicht sicher, ob es so auch geht.


----------



## knowledge (21. Feb 2009)

Danke für die Antworten... Gibt es noch eine andere Möglichkeit? Also einfach nen Ordner in dem Projekt anlegen und dort die Bilder reintun?

Also ich will z.B. einfach nur ein paar Bilder/Dateien die ich in meinem Projekt hab als File oder BufferedImage usw. einlesen. Brauche also im wesenlichen nur die Datei und den Pfad.


----------



## Wildcard (21. Feb 2009)

Und was wäre der Unterschied?


----------



## knowledge (21. Feb 2009)

Wieso hast du es über getClass gelöst? 

Das Problem...

ich habe folgende Struktur

de.package1.test
de.package2.bilder

wenn ich jetzt in ner Klasse aus Test irgendwelche Bilder laden will, dann sollte das doch wegen mir über BufferedImage(de/package2/bilder/bild1.jpg) gehen. Dazu müsste ich ggf. aber immer erst schauen in welchem aktuellen package ich grad bin um quasi zur "Wurzel" de zu kommen... Ich will einen Pfad, den ich unabhängig vom aktuellen Verzeichnis/Package aufrufen kann.


----------



## Wildcard (21. Feb 2009)

Und das kannst du mit getClass().getResource auch tun. Der Vorteil zu normalem Dateizugriff ist, das es auch später noch in einem jar Archiv funktioniert.
Ich beschreibe mal kurz als Beispiel wie ich das üblicherweise anordne.
Zwei source folder src/java und src/resources.
Alle .java kommen nach src/java, der Rest nach src/resource.
Dort liegt dann zB ein Verzeichnis (Package) images. Geladen werden die Resourcen mit getClass().getResource("/images/bild.gif");


----------



## knowledge (21. Feb 2009)

Hallöchen,

und wenn ich ein festes Verzeichnis in das jar einbinde klappt das nicht? D.h. ich muss immer so vorgehen oder hast du noch eine andere Variante?

Gruß und schönes WE


----------



## Wildcard (21. Feb 2009)

Ich glaube wir reden hier aneinander vorbei. Verzeichnis... natürlich brauchst du ein Verzeichnis, wo sollen die Dateien denn liegen wenn nicht in einem Verzeichnis? Trotzdem musst du Resourcen über den Classloader laden, denn in einem jar gibt es weder Dateien, noch Verzeichnisse.


----------



## knowledge (21. Feb 2009)

Hallo,

danke. 

Ich hab aber noch nicht ganz verstanden, warum es in einem jar keine Verzeichnisstruktur gibt, d.h. dieser Weg gegangen werden muss. Eine jar ist doch (fast) nur eine Zip Datei...

Mit getClass gibt es mir doch die aktuelle Klasse eines Objektes zurück. Wenn ich also ein Objet der Klasse Test habe, dann wird "Test" zurückgegeben. Die Methode getResource kommt ja aus der ClassLoader Klasse... Ich hab da den Zusammenhang noch nicht ganz verstanden zwischen Class, ClassLoader usw...

Danke für dein geduldiges Antworten


----------



## Wildcard (21. Feb 2009)

> Ich hab aber noch nicht ganz verstanden, warum es in einem jar keine Verzeichnisstruktur gibt, d.h. dieser Weg gegangen werden muss. Eine jar ist doch (fast) nur eine Zip Datei...


Richtig, und in einem Zip gibt es weder Dateien, noch Verzeichnisse, nur Zip Entries. Also kann man auch keine File-System API verwenden.

getResource ist einfach eine Methode die auf einem Class Objekt definiert ist. Du kannst auch direkt über den Classloader gehen wenn dir das lieber ist, macht aber keinen Unterschied.


----------



## Leroy42 (23. Feb 2009)

knowledge hat gesagt.:


> ich habe folgende Struktur
> 
> de.package1.test
> de.package2.bilder
> ...



Mach dir am besten zuerst einmal klar, daß *packages* _überhaupt nichts_ mit *Verzeichnissen* zu tun haben  !


----------



## hendto (6. Mrz 2009)

Hallo,

gibt es möglichkeit eine Datai/Image aus anderem Projekt zu laden?

z.B.:
c:\workspace\Proj1\src\resorce\image.png -> Image Datei

c:\workspace\Proj2\src\org\test\gui\GuiBuilder.java -> hier wird die Datei aufgerufen.

Ist das möglicht der Pfad ohne "C:\...." zu geben? (damit wenn ich die workspace wo anderes verschiebe, läuft das Programm noch, ohne den Pfad zu ändern.

Danke.


----------

