2016-07-27 14 views
0

Ich verwende IDEA 14, um einem einfachen Java-Lernprogramm (JDBC) zu folgen. Als Teil davon speichere ich einige Konfigurationseigenschaften in einer Datei namens jdbcTutorial.properties. Als ich dies in dem Stammverzeichnis des Projektes setze, kann ich es mit dem folgenden Wortlaut:Java kann die Datei nicht lesen, außer im Projektstammverzeichnis

Properties props = new Properties(); 
props.load(new FileInputStream("jdbcTutorial.properties")); 

aber sobald ich es zu einem anderen Verzeichnis im Projekt verschieben, ich "No such file or directory" die Fehler. Dies geschieht unabhängig davon, ob ich einen relativen oder absoluten Pfad angeben:

enter image description here

Vielleicht gibt es mehr Möglichkeiten, Standardkonfigurationsdateien zu verwenden, aber ich würde wirklich das Verhalten verstehen mag ich beobachtet werde. Danke fürs Helfen!

+1

Er sagt: "FileNotFoundException: jdbcTutorial.properties" und nicht "FileNotFoundException: /Users/****/jdbcTutorial/resources/jdbcTutorial.properties". Dies bedeutet, dass die Version, die Sie ausführen, nicht die Version ist, die Sie im Quellfenster anzeigen. Probieren Sie eine vollständige Reinigung und neu erstellen. –

+0

Der Neuaufbau und das Ungültigmachen des Cache haben nicht geholfen, aber ich habe es geschafft, obwohl ich es nur halb verstehe. Ich habe ein JAR-Artefakt in der Projektstruktur angegeben. Als ich es löschte, bemerkte ich, dass ich einen anderen Fehler bekam, dass eine JAR nicht gefunden wurde. Wenn Sie also "run" drücken, wird ein Artefakt erzeugt, wenn Sie ein jar haben, anstatt den Quellcode zu kompilieren und auszuführen. Also musste ich dieses Artefakt erneut erstellen, dann ausführen und es funktioniert (findet die Datei). Ich werde mehr darüber lesen, danke! – allstar

Antwort

1

Standardmäßig wird das Stammverzeichnis zum Buildpfad Ihres Projekts hinzugefügt. Da das Verzeichnis, in das Sie die Datei einfügen, nicht im Build-Pfad Ihres Projekts hinzugefügt wird, kann jvm die Datei nicht finden. Sie haben zwei Optionen:

  1. Fügen Sie den Ordner hinzu, in dem Sie Ihre Requisite platzieren, um den Pfad zu erstellen.
  2. Zugriff auf die Datei mit vollständigem Pfad d/home/user/Arbeitsplatz/....
+0

Danke für die schnelle Antwort - ich habe weiter oben betont, dass dies auch bei angegebenem absoluten Pfad geschieht. – allstar

0

Wenn kein Pfad für eine Datei geliefert wird, nimmt java, dass diese Datei in dem Stammordner des Projektes. Also der relative Pfad "." zeigt immer auf diesen Ordner. Wenn sich die Datei an einer anderen Stelle befindet, geben Sie den entsprechenden relativen Pfad vor dem Pfadnamen ein, z. B. "./files/configuration/jdbcTutorial.properties".

Es funktioniert auch, wenn Sie einen absoluten Dateipfad vor dem Pfadnamen wie "C: /Users/Me/Documents/Java/workspace/thisProject/files/configuration/jdbcTutorial.properties" einfügen.

+0

Danke für die schnelle Antwort - ich habe weiter oben betont, dass dies auch bei angegebenem absoluten Pfad geschieht. – allstar

+0

Execute System.out.println (neue Datei ("jdbcTutorial.properties"). GetAbsolutePath()); um herauszufinden, wo das System die Datei annimmt. – Keksi

+0

Vielleicht fehlt die Laufwerksangabe ("C:" oder "D:") am Anfang des absoluten Dateipfads? – Keksi

1

Wenn Sie ein Projekt erstellen, nimmt IDEA die Dateien im Ressourcenverzeichnis und legt sie im ausführbaren Jar ab. Um also einen Eingabestream aus dieser Datei zu erhalten, müssen Sie sie direkt aus dem Jar holen. Anstelle von Fileinputstream verwenden

getClass().getResourceAsStream("jdbcTutorial.properties") 
+0

Ich werde einen Blick darauf werfen, ich denke, Sie schlagen einen überlegenen Ansatz vor, aber ich war neugierig, warum genau das spezifische Problem, das ich sah, aufgetreten war. Ich glaube, eine JAR kann immer noch eine externe Datei lesen, die ich mit FileInputStream gelesen habe. Ich denke, der Fehler, den ich bekam, war, weil ich das JAR nicht neu aufgebaut hatte. Die "run" -Funktion bietet Ihnen mehrere Optionen - um von der Hauptmethode aus zu starten oder um eine JAR auszuführen, die Sie zuvor erstellt haben. Meine alte JAR enthielt keine Codeänderung, um nach der Datei in diesem neuen Verzeichnis zu suchen. Als ich das JAR neu aufbaute, oder einfach von main lief, funktionierte es gut. Ich werde mehr in deine Tipps auch schauen! – allstar

+0

Ja, das Glas kann tatsächlich eine externe Datei lesen. Ihr Problem war, dass, wenn IDEA das jar ausführt, das Standardverzeichnis das Projektstammverzeichnis ist, sodass es nicht die Datei gefunden hat, die sich im Ressourcenverzeichnis befand. –

Verwandte Themen