Wie auf anderen Ordner im Projektordner zugreifen?

Angiii

Erfahrenes Mitglied
Hallo,

ich habe ein Problem damit, auf die verschiedenen Unterordner meines Projektordners zuzugreifen. Das alles hat wohl auch ein bißchen mit Projektorganisation zu tun.

Ich habe einen Hauptordner "Testprojekt", der alle für mein Programm nötigen Dateien enthält. Der Ordner soll folgende 3 Unterordner enthalten:

bin -> *.class-Dateien
src -> *.java-Dateien
img -> *.bilder

Mein Problem ist, dass ich von meinen Sourcecode aus den Bilderordner "img" nicht erreichen kann. Sobald ich den "img"-Ordner jedoch in den "bin--Ordner schiebe, funktioniert es. Da ist aber eigentlich nicht die Lösing die ich haben will.

Ich habe folgende Funktion zum Aufruf des Bildes:
Code:
 images[i] = createImageIcon("../img/Deutschland.png");
Diese Funktion soll ein Deutschlandflaggenbild aufrufen, welche sich im Ordner "img" des Projektordners befindet.

Hier die createImageIcon-Funktion dazu:
Code:
   protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = jPanel.class.getResource(path);
       	
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
                return null;
        }
    }
Wenn ich den "img"-Ordner in meinen "bin"-Ordner verschiebe, funktioniert der Code mit der Funktion images[i] = createImageIcon("img/Deutschland.png");
Ich will aber nicht auf einen Unterordner von "bin"-zugreifen, sondern zuerst in den Überordner wechseln, um dann von da aus in den "img"-Ordner zu springen.

Ich habe gelesen, dass es u.a. mit der Signierung zusammenhängen kann. Im Moment arbeite ich aber noch rein in Eclipse ohne das ich irgendwelche jars exportiert habe. Da sollte es mit der Signierung noch keine Probleme geben.
Ich dachte mit "../" könnte man Überordner ansteuern? Das funktionierte bei mir nur leider nicht. Oder ist meine "createImageIcon"-Funktion einfach falsch total falsch?

Langsam kommts mir vor als wär in diesem Forum jeder zweite Frage von mir ;-).
Vielen Dank im Voraus für Eure Hilfe!
 
Hmmm, komisch, eigentlich sollte das so funktionieren.

Versuch mal bitte folgendes und sag mir, was du als Ausgabe kriegst:

Code:
System.out.println(new File("../img/Deutschland.png").getAbsolutePath());
 
Moin,

bist Du denn sicher, dass Du Dein Projekt im "bin"-Verzeichnis startest? ? ?:confused:
Alle Pfadangaben sind nämlich relativ zu diesem Startverzeichnis! Der Verdacht liegt auch nahe, weil lt. Deiner Aussage ja "img/..." funktioniert ;-]

Gruß
Klaus
 
Ok hab das mal eingegeben. Ich erhalte folgende Ausgabe:

Code:
P:\Eclipse Workspace\Testprojekt\..\img\Deutsch.png

Irgendwie hat der das"\.." voll ignoriert. Wenn ich es weglasse erhalte ich
Code:
 P:\Eclipse Workspace\Testprojekt\img\Deutsch.png
An sich würde das Stimmen. Das Bild wird leider trotzdem nicht gefunden. Hat auch schon vorher erfolglos versucht, den Pfad auf diese Weise anzugeben.
 
Moin,

Ok hab das mal eingegeben.
Ich erhalte folgende Ausgabe:
Was jetzt? ? ? Etwa genau so:
P:\Eclipse Workspace\Testprojekt\..\img\Deutsch.png
:suspekt: Das ist natürlich keine korrekte Pfadangabe! ".\" oder "..\\" sollte nur an Anfang von relativen Pfaden verwendet werden !
!
P:\Eclipse Workspace\Testprojekt\img\Deutsch.png
Das ist der absolute Pfad? ? ?
Ich vermute wie gesagt ganz stark, dass Dein Programm in "P:\Eclipse Workspace\Testprojekt" liegt und Du somit mit "img\\Deutsch.png" drauf zugreifen kannst!

Gruß
Klaus
 
Hmmm, noch komischer ;P ...

er scheint ja den Absoluten Pfad zur Datei zu haben. Was ich mir denken könnte ist, dass du irgendwo nen Tippfehler hast ... in deinem ersten Post war es 'Deutschland.png', in deinem Zweiten 'Deutsch.png' vielleicht liegt da der Fehler.

Axo, stürtz das Programm eigentlich ab? Gibt es in der Console irgend eine Fehlermeldung?
 
Hmmm, noch komischer ;P ...

er scheint ja den Absoluten Pfad zur Datei zu haben. Was ich mir denken könnte ist, dass du irgendwo nen Tippfehler hast ... in deinem ersten Post war es 'Deutschland.png', in deinem Zweiten 'Deutsch.png' vielleicht liegt da der Fehler.

Axo, stürtz das Programm eigentlich ab? Gibt es in der Console irgend eine Fehlermeldung?

Ja hab mich in dem zweiten Post verschrieben. Es bleibt natürlich bei Deutschland.png. Hatte das falsch aus dem Quellcode übernommen. Fehlermeldungen erscheinen keine.

Ich hab jetzt mal noch etwas ausprobiert:
Ich habe den img-Ordner in den bin-Order geschoben. Wenn jetzt die Funktion " System.out.println(new File("img/Deutsch.png").getAbsolutePath());" ausführe erhalte ich folgende Ausgabe:

Code:
P:\Eclipse Workspace\Testprojekt\img\Deutschland.png

Das kann doch gar nicht sein! Der img-Ordner ist doch jetzt im bin-Ordner?! Liegt es vielleicht an meinen Eclipse-Einstellungen?
Im bin-Ordner befinden sich nur die *.class Dateien. Im Hauptordner Testprojekt befinden sich noch die *.project und die *.classpath.
 
Also das File-Objekt repräsentiert (anders als der Name vermuten lässt) nur den Pfad zu einer Datei, nicht die Datei selbst. Es ist java also vollkommen egal, ob der Odner 'img' existiert oder nicht - er gibt dir den Pfad trotzdem aus.

ich glaub der Fehler liegt hier:

Code:
protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = jPanel.class.getResource(path);
       	
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
                return null;
        }
 }

veruch mal so was:

Code:
protected static ImageIcon createImageIcon(File path) {
     return new ImageIcon(imgURL);
}
 
getResource ist dazu gedacht um sich Resourcen aus einem späteren Jar zu holen und daher nicht geeignet um auf etwas zuzugreifen was nicht im Jar liegt. Wenn du auf deinen img Ordner zugreifen willst dann nimmst du einfach:
URL imgURL = new File("img","deutsch.png").toURI().toURL();

Das ist der Weg um auf relativ zum Ausführungsverzeichnis liegende Dateien zuzgreifen.

Die Ausgabe
P:\Eclipse Workspace\Testprojekt\..\img\Deutsch.png
ist in sofern korrekt, da dies eine gültige Pfadangabe ist. Um den Pfad wirklich aufzulösen hättest du getCanonicalPath verwenden müssen.

Und: eclipse führt immer im Projektordner und nicht im bin Ordner aus. Den bin Ordner kann man sich in der Hinsicht als entpackters JAR vorstellen.
 

Neue Beiträge

Zurück