Pfad relativ eingeben

Status
Nicht offen für weitere Antworten.

RudiRakete

Aktives Mitglied
Hallo und guten Tag an alle!
Erst einmal hoffe ich, dass ich hier imrichtigen Forum bin!?! :-/

Ich versuche hier eine Web-Applikation zu entwickeln. Dazu müssen u.a. auch Properties geladen werden. Bisher mache ich das so:

[highlight=Java]FileInputStream is = new FileInputStream("D:\\Daten\\Kalender\\db.properties");
properties.load(is);
[/highlight]

Da der Pfad hier aber "hart" codiert ist, möchte ich den Pfad relativ gestalten. (Kalender ist auch gleichzeitig mein Projektname).
Wenn ich aber das eingebe, ist "is" immer NULL:

[highlight=Java]FileInputStream is = new FileInputStream("db.properties");
properties.load(is);[/highlight]

Weiß jemand woran das liegt, bzw. was ich hier falsch mache?

Schöne Grüße
Rudi
 
Zuletzt bearbeitet:
M

maki

Gast
Propertiy Dateien sollten in einer WebApp als Resource, nicht als FIS geladen werden.
Dann müssen die Property Dateien auch "nur" im CP liegen.
 

RudiRakete

Aktives Mitglied
Hi,
da hatte ich das hier auch schonmal versucht, aber das klappt auch gar nicht (nicht mal mit dem "harten" Pfad): (Error 500)

[highlight=Java]
InputStream is = this.getClass().getClassLoader().getResourceAsStream("D:\\Daten\\Kalender\\db.properties");
[/highlight]
 

RudiRakete

Aktives Mitglied
Also das hört sich alles sehr interesant an, was in dem Artikel steht - danke für den Link.
Allerdings würde ich mich mal nicht als "DEN" Java-Kenner beschreiben ;-)
Wo/Wie kann ich das denn mit dem Classpath einstellen, damit ich das mit den Properties nutzen kann?

Habe jetzt mal das versucht, aber auch das funzt nicht :-/

[HIGHLIGHT="Java"]InputStream is = this.getClass().getClassLoader().getResourceAsStream("Kalender/db.properties");[/HIGHLIGHT]
 

Ebenius

Top Contributor
ClassLoader lädt Resourcen immer relativ zu seinem Wurzelverzeichnis. Für Dich heißt das, Dein "Kalender/bin" (oder "Kalender/classes") -Verzeichnis -- eines der beiden wird normaler Weise aus "Kalender/src" übersetzt, indem Java-Dateien kompiliert und Resources kopiert werden -- ist eine relative Wurzel des Pfades. Du müsstest also eines derer Dinge tun:
  1. Dein "Kalender"-Verzeichnis auch noch als Source Directory in Deiner Entwicklungsumgebung angeben. Davon ist dringend abzuraten, weil sich dann die Verzeichnisse überschneiden!
  2. Die Resource mit "../db.properties" laden (ich hab's nicht probiert, geht aber eventuell). Davon ist dringend abzuraten, weil man nicht unter der Wurzel herumgräbt!
  3. Die Resource nach "Kalender/src" verschieben. Annehmbare Lösung, wenn die Properties nur vom Entwickler verändert werden sollen.
  4. Die Resource nach "Kalender/etc" verschieben und dieses Verzeichnis in den ClassPath aufnehmen. Im allgemeinen eine gute Lösung.
  5. Die Resource mit einem FileInputStream und nicht per ClassLoader laden: Gute Lösung bis schlechte Lösung, abhängig davon, wie das Programm später verteilt/installiert werden soll.
Ich bin meistens für 4.

Ebenius
 

RudiRakete

Aktives Mitglied
Hallo,
wow, vielen Dank für deine ausführliche Antwort. Prima!

Also ich habe jetzt mal Lösung 3 ausprobiert, und die klappt :) Spitze!
Lösung 4 werde ich denke ich mal auch noch versuchen, leider weiß ich noch nicht so wirklich, wie ich etwas in den ClassPath aufnehme (bzw. wo/wie ich den finde ;-) )

Schöne Grüße
RUDI
 
M

maki

Gast
Du gehst sowieso schon über den CP, denn ansonsten funzt deine WebApp nicht auf dem Server ;)
 

RudiRakete

Aktives Mitglied
Hmm, das mit dem CP versteh ich nicht so ganz, aber egal ;-)

Aber was mir gerade auffällt, dass das jetzt läuft, hatte gar nichts damit zu tun, dass ich die properties in /src gepaxkt habe, sondern ich habe einfach mal gleichzeitit auch eine properties in einen Ordner namens "Kalender/WebContent" gepackt, und das ist die Datei, auf die er zugreift!?! Ich mein, ich bin zwar froh, dass es läuft, aber trotzdem auch irgendwie ratlos ;-)
 

RudiRakete

Aktives Mitglied
Also das ist der Code meines Verbindungskonstruktors (mit allen Versuchen ;-) )
[HIGHLIGHT="Java"] public Verbindung()
{
//logger.info("Entry: Verbindung.Konstruktor()");
properties = new Properties();
//
try
{
//properties.load(new FileInputStream("D:\\Daten\\Websphere Studio\\Kalender\\db.properties"));
//properties.load(new FileInputStream("/Kalender/db.properties"));
InputStream is = this.getClass().getClassLoader().getResourceAsStream("db.properties");
properties.load(is);

logger.info("db.Properties wurden geladen");
System.out.println("db.Properties geladen");
}
catch (FileNotFoundException e1)
{
logger.error("Propertiesdatei wurde nicht gefunden");
//e1.printStackTrace();
}
catch (IOException e1)
{
logger.error("Fehler beim Lesen der Propertiesdatei");
//e1.printStackTrace();
}

/* Treiberinitialisierung für Access-Datenbanken */
// Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
try
{
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
//Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();

}
catch (Exception e)
{
//System.out.println("Treiber nicht gefunden");
logger.error("Treiber nicht gefunden: " + e.getMessage());
//e.printStackTrace();
}
/* Verbindungsaufbau mit Pfad, Benutzernamen, Passwort */
try {
con = java.sql.DriverManager
.getConnection("jdbc:derby:" + properties.getProperty("dbloca"), properties.getProperty("dbuser"), properties.getProperty("dbpass"));
//.getConnection("jdbc:derby:D:\\Daten\\Websphere Studio\\Kalender\\kalenderDB","APP","APP");
//.getConnection("jdbc:derby:D:\\Daten\\Websphere Studio\\Kalender\\kalenderDB", properties.getProperty("dbuser"), properties.getProperty("dbpass"));
//.getConnection("jdbc:derby:kalenderDB", properties.getProperty("dbuser"), properties.getProperty("dbpass"));
}
catch(Exception e ) {
//System.out.println("Konnte nicht verbinden");
logger.error("Konnte nicht verbinden: " + e.getMessage());
//e.printStackTrace();
}
/* Statement, Grundlage der Ausführung von Statements, wird erstellt */
try {
stmt = con.createStatement();
}
catch (Exception e) {
//System.out.println("Konnte Statement nicht erstellen");
logger.error("Konnte Statement nicht erstellen: " + e.getMessage());
//e.printStackTrace();
}
//logger.info("Exit: Verbindung.Konstruktor()");

}[/HIGHLIGHT]

Das hier steht in der properties:
#DB
dbloca://localhost:1527/kalenderDB
dbuser:APP
dbpass:APP
sourceCountry:D:\\Daten\\Websphere Studio\\Kalender\\WebContent\\_install\\Country.txt
sourceProvince:D:\\Daten\\Websphere Studio\\Kalender\\WebContent\\_install\\Province.txt
sourceHoliday:D:\\Daten\\Websphere Studio\\Kalender\\WebContent\\_install\\Holiday.txt
sourceHolidayInCountry:D:\\Daten\\Websphere Studio\\Kalender\\WebContent\\_install\\HolidayInCountry.txt
sourceHolidayInProvince:D:\\Daten\\Websphere Studio\\Kalender\\WebContent\\_install\\HolidayInProvince.txt
 
M

maki

Gast
Code:
InputStream is = this.getClass().getClassLoader().getResourceAsStream("db.properties");
Das ist ok, denn hier wird nur im CP gesucht.
 

RudiRakete

Aktives Mitglied
Das ist ja schonmal etwas erfreuliches :)

In der Properties steht für die DB ja folgendes:

//localhost:1527/kalenderDB

Wenn die Anwendung ja später auf nen Server läuft, ist das localhost doch falsch, oder? Die DB ist im Projekt integriert, und zwar in dem Ordner Kalender/kalenderDB.

Bisher stelle ich die Connection ja so her:
[HIGHLIGHT="Java"]con = java.sql.DriverManager.getConnection("jdbc:derby:" + properties.getProperty("dbloca"), properties.getProperty("dbuser"), properties.getProperty("dbpass"));[/HIGHLIGHT]

Folgendes hatte ich auch schonmal versucht (aber Error 500):
[HIGHLIGHT="Java"]con = java.sql.DriverManager.getConnection("jdbc:derby:kalenderDB", properties.getProperty("dbuser"), properties.getProperty("dbpass"));[/HIGHLIGHT]


Gibt es für so etwas auch bekanntere/bessere Lösungen, oder kann ich evtl. doch alles so lassen, wie bisher?

Grüße
 
M

maki

Gast
dbUrl
dbUser
dbPassword

Solltest du auf jedenfall in deiner Properties Datei haben.

Manchmal, wenn man zB. ganz andere DBs verwendet, ist auch der Name des Treibers sinnvoll, musst du entscheiden.
 

RudiRakete

Aktives Mitglied
Ach so, dann ist das ja schonmal so weit richtig. Ist der DB-Pfad in meiner Properties denn so richtig, d.h. ist der so auch gültig (mit dem localhost...), wenn die Anwendung später auf einem Webserver läuft?
Sorry, für die vielen Fragen :-/
 

RudiRakete

Aktives Mitglied
Eine letzte Frage noch, dann gebe ich Ruhe :)

Die DerbyDB ist ja in dem Projekt "integriert". Die DB muss ich allerdings immer noch manuell starten, damit meine Anwendung funktioniert. Wenn die später auf nem Server läuft, kann man das auch irgendwie "automatisch" machen, dass die DB gestartet wird, oder muss ich das dann gar nicht mehr machen?

Und: Wenn ich in der Properties das "localhost" durch meine IP ersetzte, läuft die Anwendung nicht mehr. Wieso ist das so?

Schöne Grüße
 

faetzminator

Gesperrter Benutzer
Ich gehe davon aus, dass du nicht die lokale IP (z.B. 192.168.xxx.xxx oder 160.59.xxx.xxx) sondern die externe (gegen das Internet) angegeben hast. Natürlich muss auf dem Server der Daemon laufen, aber das sollte wohl nicht dein Problem sein? (Irgendwas muss ja auch beim Booten den Webserver etc starten)
 

RudiRakete

Aktives Mitglied
Nene, ich hatte meine lokale eingegeben... Keine Ahnung worans liegt. Ich werde einfach mal ein EAR-File erstellen, und schauen was passiert wenn das auf nem Server installiert wird...
Erstmal danke an alle für die gute und schnelle Hilfe. Klasse
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Dotenv relativer vs absoluter Pfad Java Basics - Anfänger-Themen 2
J Pfad zerlegen Java Basics - Anfänger-Themen 2
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
C Pfad zu Properties-File bei ResourceBundle Java Basics - Anfänger-Themen 7
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
P Möglichen Pfad überprüfen Java Basics - Anfänger-Themen 5
M Java GUI explorer aufrufen um Pfad zu bekommen Java Basics - Anfänger-Themen 3
R FXMLLoader Pfad falsch`? Java Basics - Anfänger-Themen 4
S Alternativer Pfad Java Basics - Anfänger-Themen 5
R speicherort Mac pfad angeben Java Basics - Anfänger-Themen 3
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
O Best Practice Datei-Pfad zerlegen Java Basics - Anfänger-Themen 4
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
H pfad finden Java Basics - Anfänger-Themen 12
H Pfad Program Files\Common Files\Oracle\Java\javapath Java Basics - Anfänger-Themen 3
L Pfad zum Jar Java Basics - Anfänger-Themen 7
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
J Leerzeichen im Pfad automatisch erkennen Java Basics - Anfänger-Themen 30
B Log4J Pfad des Logfiles definieren Java Basics - Anfänger-Themen 6
D Umgebungsvariable Pfad javaw.exe für Programmstart auf Windows Java Basics - Anfänger-Themen 1
D Pfad Java Basics - Anfänger-Themen 15
H nio Pfad aus Dateinamen extrahieren Java Basics - Anfänger-Themen 4
R Pfad angeben Java Basics - Anfänger-Themen 7
S Pfad für Dateisystem?? Java Basics - Anfänger-Themen 13
P JSON-Konfigurationsdatei verwenden: Probleme mit Pfad Java Basics - Anfänger-Themen 1
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
M Pfad zu einer Datei in einer exportierten Jar-Datei Java Basics - Anfänger-Themen 5
S ungültiger Pfad bei der Installation von API documentation Java Basics - Anfänger-Themen 0
N .propertiesdatei über Relativen Pfad einlesen lassen Java Basics - Anfänger-Themen 5
I ZIP Archive erstellen - ich möchte aber nur den jeweiligen Ordner zippen, bekomme ganzen Pfad Java Basics - Anfänger-Themen 1
I Bei Umlauten und Leerzeichen im Pfad, wird Datei nicht gefunden Java Basics - Anfänger-Themen 5
O JFileChooser Verhalten -Pfad Java Basics - Anfänger-Themen 15
V java Pfad javac Java Basics - Anfänger-Themen 8
D Ein Icon ohne Pfad sondern mit Package. Java Basics - Anfänger-Themen 4
P Leerzeichen in Pfad... Java Basics - Anfänger-Themen 17
P Datei auf Pfad speichern Java Basics - Anfänger-Themen 7
B Relativer Pfad zwischen zwei Files Java Basics - Anfänger-Themen 2
H Programm zur Ausgabe von Datei und Pfad Java Basics - Anfänger-Themen 7
C Pfad für Bilder angeben Java Basics - Anfänger-Themen 11
L Pfad "zuschneiden" Java Basics - Anfänger-Themen 3
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
V relativer Pfad geht nicht, absolut schon? Java Basics - Anfänger-Themen 3
J Input/Output Datei auslesen, Pfad eingeben Java Basics - Anfänger-Themen 4
S PATH und Pfad auslesen.... Java Basics - Anfänger-Themen 3
X JDK installieren Pfad wird nicht gefunden Java Basics - Anfänger-Themen 5
B Classpath cmd java mit absolutem Pfad Java Basics - Anfänger-Themen 15
B eingene Klasse in eigenem Prozess starten mit relativem Pfad Java Basics - Anfänger-Themen 5
J FileOutputStream aktuelle Speicher Pfad ausgeben Java Basics - Anfänger-Themen 13
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
F Zugriff auf Pfad des gerade ausgeführten Programms? Java Basics - Anfänger-Themen 14
S Pfad auslesen Java Basics - Anfänger-Themen 3
B Externe Libraries fuer Applet ... Pfad eingeben? Java Basics - Anfänger-Themen 23
Helgon Pfad richtig angeben Java Basics - Anfänger-Themen 7
E Input/Output Relativer Bild-Pfad für InputStream Java Basics - Anfänger-Themen 5
M Existiert der gegebene Pfad? Java Basics - Anfänger-Themen 5
G aktueller Pfad Java Basics - Anfänger-Themen 4
F Relativer Pfad auf Datei im Projektordner Java Basics - Anfänger-Themen 11
B Pfad einer .jar im Programm ermitteln Java Basics - Anfänger-Themen 13
T Pfad für Datei neben Jar Java Basics - Anfänger-Themen 9
S File Kopieren Path Pfad Problem Java Basics - Anfänger-Themen 3
I Java-Programmm starten/ Pfad hsql DB Java Basics - Anfänger-Themen 7
D Input/Output Pfad richtig ermitteln Java Basics - Anfänger-Themen 12
T Pfad gültig oder ungültig? Java Basics - Anfänger-Themen 17
T brauche den pfad Name! Java Basics - Anfänger-Themen 2
Z css pfad falsch Java Basics - Anfänger-Themen 7
P ImageIcon/Pfad Java Basics - Anfänger-Themen 3
M externen Pfad in Jar verwenden Java Basics - Anfänger-Themen 3
V pfad.exists() gilt nicht für "//server/a/xyz.jpg"? Java Basics - Anfänger-Themen 12
C Relativer Pfad - Statische Methode Java Basics - Anfänger-Themen 6
C exec Aufruf mit Leerzeilen im Pfad Java Basics - Anfänger-Themen 3
J Pfad bzw. Namen einer Datei auslesen Java Basics - Anfänger-Themen 6
D Pfad zu "Eigenen Dateien" ermitteln Java Basics - Anfänger-Themen 8
A Relativer Pfad zu einem File ermitteln Java Basics - Anfänger-Themen 2
M createImage ungültiger Pfad registrieren Java Basics - Anfänger-Themen 2
S Pfad für Datei falsch - wie richtig angeben? Java Basics - Anfänger-Themen 7
H Wie Projekt-Ordner-Pfad ermitteln? Java Basics - Anfänger-Themen 11
A Aktueller Pfad des Programms (.jar) ermitteln Java Basics - Anfänger-Themen 10
M Problem mit relativen Pfad unter Linux Java Basics - Anfänger-Themen 5
L relativer Pfad Java Basics - Anfänger-Themen 2
S In Eclipse relativen Pfad fuer Tomcat Server erstellen..? Java Basics - Anfänger-Themen 3
E Pfad zu einem gif-Bild wird zur Laufzeit nicht gefunden Java Basics - Anfänger-Themen 5
megachucky FileInputStream findet nur absoluten Pfad, keinen Relativen ?! Java Basics - Anfänger-Themen 7
M Pfad angabe bei getRescource und ImageIO.write Java Basics - Anfänger-Themen 4
E new File macht den Pfad kaputt Java Basics - Anfänger-Themen 15
0 Den Pfad für das Bild angeben Java Basics - Anfänger-Themen 9
D Pfad zum Konfigurationsfile von Servletanwendung "dynamisieren" Java Basics - Anfänger-Themen 27
H Wie mache ich aus pfad\\unterpfad pfad\unterpfad? Java Basics - Anfänger-Themen 3
L datei speichern untervorgegebenen pfad Java Basics - Anfänger-Themen 3
A relativer Pfad Java Basics - Anfänger-Themen 6
R Properties über statischen Pfad laden Java Basics - Anfänger-Themen 2
L Pfad von Webprojekt auslesen Java Basics - Anfänger-Themen 10
F Datei suchen --> Pfad als String speichern Java Basics - Anfänger-Themen 8
Z Pfad zum Jararchiv Java Basics - Anfänger-Themen 4
S Object Pfad Java Basics - Anfänger-Themen 3
S log4j pfad per umgebungsvariable setzen? Java Basics - Anfänger-Themen 2
G Mit jFileChooser Pfad rauskriegen? Java Basics - Anfänger-Themen 3
G Pfad einer Klasse Java Basics - Anfänger-Themen 6
D Relativer Pfad innerhalb jar Datei Java Basics - Anfänger-Themen 5
C Problem mit einem Pfad Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben