# Pfad bei Webprojekt in Eclipse herausfinden



## Korki (30. Okt 2009)

Hallo,

Folgendes Problem:
Ich habe ein Webprojekt in Eclipse erstellt und nun möchte ich Bilder aus dem WebContent in einer Java-Klasse prüfen, ob sie existieren.

Relative Pfade machen ja keinen Sinn "C:\eclipse\workspace...", wenn ich mal ein WAR-File daraus mache geht es nicht mehr.
Heißt ich müsste ja nur den Projektordner herausfinden damit ich den Rest fixieren kann, aber wie kriegt man den heraus? Beispiel:
/ProjektOrdner/"WebContent/images/"

Ich weiß, dass man über Servlets mit request.getContextPath() den Projektnamen erhält, aber ich möchte diesen eigentlich nicht in jede Klasse durchreichen müssen.

Gruß


----------



## maki (30. Okt 2009)

Context bietet die Methode getResourceAsStream, mit java.io.File solltest du nicht arbeiten.


----------



## Korki (30. Okt 2009)

Könntest du mal ein kurzes Beispiel zeigen, wie du das jetzt genau meinst?

Struktur:
Projekt
 - src
  -source.java
 - WebContent
  - images
   - datei.jpg

Von einem Servlet aus wird ein Aufruf an eine Java-Klasse weitergeleitet und dann?
Ich muss aus der source.java an die datei.jpg rankommen


----------



## Korki (2. Nov 2009)

Moin,

ich habe jetzt eine Lösung gefunden, ob die so richtig ist weiß ich nicht...
Vielleicht kann ja nochmal einer antworten, falls es die falsche bzw. eine bessere Lösung gibt

EineKlasse.class.getClassLoader().getResource("../WebContent/images/").getPath()


----------



## mvitz (2. Nov 2009)

Ist so schon korrekt.


----------



## maki (2. Nov 2009)

mvitz hat gesagt.:


> Ist so schon korrekt.


Nein, ist es nicht.

Wieso schreibe ich eigentlich kein File zu verwenden und mit getResourceAsStream zu arbeiten wenn dann doch wieder genau das Gegenteil gemacht wird? :autsch:


----------



## mvitz (2. Nov 2009)

Sry ^^ hatte ich nicht ganz gesehen. Richtig wäre im Servlet folgendes:


```
getContext().getResource("images/...");
```


----------



## maki (2. Nov 2009)

Schon besser 

Aber was sollte man denn mir einer URL anstellen? (Nochmals: java.io.File ist böse)
Wie gesagt, getResourceAsStream wäre imho "richtiger".


----------



## mvitz (2. Nov 2009)

Hast du schon recht, aber wenn er ja kontrollieren möchte, ob es ein Bild gibt, dass z.B. den Namen X hat, wäre das ja schon besser, als per getResourceAsStream() und dann eine Exception zu fangen, oder?


----------



## maki (2. Nov 2009)

mvitz hat gesagt.:


> Hast du schon recht, aber wenn er ja kontrollieren möchte, ob es ein Bild gibt, dass z.B. den Namen X hat, wäre das ja schon besser, als per getResourceAsStream() und dann eine Exception zu fangen, oder?


Eine Nullpointerexception sollte man eig. nicht fangen, ausser um sie weiterzuwerfen, denn diese deuten meist auf Programmierfehler hin.
Eine Java WebApp soll als War Archiv ausgeliefert werden.
Laut Spek. darf man keine Annahmen darüber machen, ob dieses Archiv entpackt wird (bei manchen JEE Servern ist das sogar der Fall).


----------



## mvitz (3. Nov 2009)

Ich denke, wenn er sein Problem nicht detaillierter beschreibt, kann man ihm auch sehr schlecht helfen.

Zu der Sache mit der NullPointerException und dem WAR bezüglich des entpackens:

Das ist mir bewusst und auch klar, ABER wenn er kontrollieren möchte ob es imageX.jpg in Verzeichnis CONTEXT/images/ gibt, dann hat er ja nur die Möglichkeit über:

context.getResource("images/imageX.jpg") oder context.getResourceAsStream("images/imageX.jpg") zu gehen.

Bei Weg 1 könnte der dann halt per File die Methode exists() aufrufen, und bei Weg 2 nur auf Null prüfen (Weshalb ich sagte: "... wäre das ja schon besser, als per getResourceAsStream() und dann eine Exception zu fangen ...")

Oder stehe ich gerade wieder auf dem Schlauch.


----------



## maki (3. Nov 2009)

> Oder stehe ich gerade wieder auf dem Schlauch.


Nee, ich glaub wir haben nur aneinander vorbeigeredet


----------

