Ich mache gerade ein kleines einfaches Java-Programm für mein Computer Science-Finale, das den Pfad der aktuellen laufenden Klasse bekommen muss. Die Klassendateien befinden sich im Ordner C: \ 2013 \ game \.
Um diesen Pfad zu erhalten, rufe ich dieses Code-Segment in meinem Hauptklassenkonstruktor auf:
%Vor%Dieser Befehl gibt jedoch diesen String zurück: "/" trotz der korrekten Ausgabe "C: / 2013 / game" Darüber hinaus habe ich versucht, dies zu beheben, indem Sie diesen Code verwenden:
%Vor%Dies gibt eine NullPointerException zurück, die darauf zurückzuführen ist, dass getClassLoader () trotz der Arbeit an meiner Eclipse-IDE null zurückgibt. Irgendwelche Ideen?
Wenn Sie eine Datei im selben Pfad wie der Code laden wollen, schlage ich vor, dass Sie sie in den gleichen Stammordner wie den Code und nicht in den Pfad der Klasse einfügen.
Grund: Die Klasse kann sich in einem Jar befinden, die Datendatei kann in dasselbe Jar gesetzt werden, aber es ist schwieriger zu bearbeiten und zu aktualisieren.
Schlagen Sie auch vor, dass Sie die in Kommentaren vorgeschlagene Präferenzklasse sehen: Ссылка In einigen Fällen ist es in Ordnung, eine eigene Datei mit Daten / excel / csv / java.util.Properties zu haben.
Ich bin mir nicht sicher, warum es in Eclipse funktioniert, aber ich würde vorschlagen, dass Sie sich darauf konzentrieren, es von einer Eingabeaufforderung / einem Terminal aus zu starten, da dies der "echte Modus" ist, wenn er live geht.
Du könntest einfach nach deiner Klasse fragen
%Vor%Dies wird dir geben
name TstPath.class Datei: /java/Projects/tests3b/build/classes/s/TstPath.class
Was ist mein Eclipse-Build-Pfad ...
muss dies analysieren, um den Pfad zu erhalten, wo die Klasse geladen wurde.
Denken Sie daran:
Möchten Sie den App-Pfad: -
Datei f = neue Datei ("./");
f.getCanonicalPath (); // ...
So kann eine App aus dem Ordner c: \ app1 \ run \
gestartet werdenDas Jar könnte sich in c: \ app1 \ libsMain \ myapp.jar
befindenund ein Hilfs-jar könnte bei c: \ commonlibs \ set1
seinDies wird Ihnen nur sagen, wo die JVM Ihre Klasse gefunden hat, die möglicherweise nicht das ist, was Sie brauchen.
Wenn Sie in einem Jar unter UNIX oder Windows etwas ähnliches finden,
jar: Datei: c: \ app \ my.jar! /s/TstPath.class
Wenn Paket s und Klasse TstPath ist, können Sie sicher sein, dass dies funktioniert, da die Klasse dort sein muss ...
jetzt, um dies zu analysieren, können Sie nach Ihrem Klassennamen suchen und / oder entfernen, bis Sie den gewünschten Pfad erhalten. String lastIndexOf hilft
Der Aufruf von getResource([String])
erfordert einen Pfad relativ zum Ordner, der die Klasse enthält, von der er aufgerufen wird. Wenn Sie also Folgendes haben, muss alles, was Sie in MyClass.class.getResource([path]);
übergeben, ein gültiger Pfad relativ zum com/putable/
-Paket-Ordner sein und auf eine echte Datei verweisen:
Die leere Zeichenfolge ist einfach nicht gültig, da niemals ein Dateiname vorhanden sein kann, der der leeren Zeichenfolge entspricht. Aber du könntest getResource(getClass().getSimpleName())
machen. Entfernen Sie einfach den Dateinamen vom Ende des von diesem Aufruf zurückgegebenen Pfades und Sie haben das gewünschte Klassenverzeichnis.
Verwenden Sie diesen Code
%Vor%besuchen Sie den Link für weitere Informationen Finde heraus, woher die Java-Klasse geladen wird
Gib den absoluten Pfad für eine Datei in deinem Klassenpfad aus, dh build / resources / main / someFileInClassPath.txt. Haftungsausschluss, dies ist ähnlich zu einer anderen Lösung auf dieser Seite, die TT.class ... verwendet, aber das hat bei mir nicht funktioniert stattdessen hat TT..getClassLoader () ... für mich funktioniert.
%Vor%Tags und Links java classloader filepath