Wie erhalte ich den aktuellen Klassennamen einschließlich des Paketnamens in Java?
Lesezeit: 3 Minuten
La bla bla
Ich arbeite an einem Projekt und eine Anforderung ist, ob das 2. Argument für die Hauptmethode mit „/“ (für Linux) sollte es als absoluter Pfad betrachtet werden (kein Problem), aber wenn es nicht mit „/“, sollte es bekommen aktueller Arbeitsweg der Klasse und hängen Sie das angegebene Argument daran an.
Ich kann den Klassennamen auf verschiedene Arten erhalten: System.getProperty("java.class.path"), new File(".") und getCanonicalPath()usw…
Das Problem ist, das gibt mir nur das Verzeichnis, in dem die Pakete gespeichert sind – dh wenn ich eine Klasse gespeichert habe in “.../project/this/is/package/name“, es würde mir nur geben “/project/” und ignoriert den Paketnamen, wo die eigentliche .class files lebt.
Irgendwelche Vorschläge?
EDIT: Hier ist die Erklärung, entnommen aus der Übungsbeschreibung
sourcedir kann entweder absolut (beginnend mit „/“) oder relativ zu dem Ort sein, von dem aus wir das Programm ausführen
sourcedir ist ein gegebenes Argument für die main-Methode. wie finde ich diesen pfad
Was werden Sie tun, wenn der Code in einem JAR verpackt ist (oder sich anderweitig nicht in einer Ordner-/Dateistruktur befindet, wie Sie annehmen)? Es ist eine gefährliche Annahme; Dies könnte für ein kleines Experiment, eine Klassenaufgabe oder eine andere verfügbare Situation gut funktionieren, aber gewöhnen Sie sich BITTE nicht daran, diese Annahme für Code in Produktionsqualität zu treffen.
– E-Riz
15. März 2012 um 22:56 Uhr
Es macht keinen Sinn, den Pfad zur Klassendatei zu finden. Auch die Übungsbeschreibung erwähnt nicht, dass, wenn Sie sie sorgfältig lesen (wo wir das Programm ausführen bedeutet den aktuellen Pfad, aus dem das Programm vom Benutzer aufgerufen wird).
– Der Nagel
15. März 2012 um 23:15 Uhr
Vielleicht können Sie mir helfen, die Anforderung besser zu verstehen? Ich muss überprüfen, ob das Argument mit einem ‘/’ beginnt (Erwähnung in der Beschreibung). Wenn dies der Fall ist, verwenden Sie es einfach als absolut. wie es ist. aber wenn nicht, wie soll ich es behandeln?
– Lablabla
15. März 2012 um 23:18 Uhr
Verwenden this.getClass().getCanonicalName() um den vollständigen Klassennamen zu erhalten.
Beachten Sie, dass sich ein Paket-/Klassenname (“abC”) vom Pfad der .class-Dateien (a/b/C.class) unterscheidet und dass die Verwendung des Paketnamens/Klassennamens zum Ableiten eines Pfads normalerweise eine schlechte Vorgehensweise ist. Sätze von Klassendateien/Paketen können sich in mehreren verschiedenen Klassenpfaden befinden, die Verzeichnisse oder JAR-Dateien sein können.
danke, aber es ist in der Hauptmethode und ‘this’ kann nicht in statischen Methoden verwendet werden. irgendeine Arbeit um ihn herum?
Class c = Class.forName("MyClass"); // if you want to specify a class
Class c = this.getClass(); // if you want to use the current class
System.out.println("Package: "+c.getPackage()+"\nClass: "+c.getSimpleName()+"\nFull Identifier: "+c.getName());
Wenn c die Klasse vertreten MyClass im Paket mypackagewürde der obige Code Folgendes drucken:
Sie können diese Informationen nehmen und für alles ändern, was Sie brauchen, oder gehen Überprüfen Sie die API für mehr Informationen.
Beachten Sie, dass Class.forName(“MyClass”) nur funktioniert, wenn es sich im Standardpaket befindet (dh keine Paketdeklaration hat).
– Der Nagel
15. März 2012 um 22:46 Uhr
@TheNail wahr und getName() gibt den Paketnamen zusammen mit dem Klassennamen zurück und wird jetzt bearbeitet.
– Jon Eulenland
15. März 2012 um 22:47 Uhr
Verwenden getSimpleName() um nur den Klassennamen ohne Paketnamen zu erhalten.
– Der Nagel
15. März 2012 um 22:48 Uhr
Anstatt von Class.forName("MyClass") du solltest benutzen MyClass.class es sei denn, Sie benötigen aus einem anderen Grund wirklich eine Laufzeiterkennung.
– mjaggard
4. Dezember 2015 um 13:46 Uhr
Der vollqualifizierte Name wird wie folgt ermittelt:
String fqn = YourClass.class.getName();
Aber Sie müssen eine Klassenpfadressource lesen. Also verwenden
InputStream in = YourClass.getResourceAsStream("resource.txt");
Md. Zahangir Alam
verwenden this.getClass().getName() bekommen packageName.className und verwenden this.getClass().getSimpleName() um nur den Klassennamen zu erhalten
12685300cookie-checkWie erhalte ich den aktuellen Klassennamen einschließlich des Paketnamens in Java?yes
Was werden Sie tun, wenn der Code in einem JAR verpackt ist (oder sich anderweitig nicht in einer Ordner-/Dateistruktur befindet, wie Sie annehmen)? Es ist eine gefährliche Annahme; Dies könnte für ein kleines Experiment, eine Klassenaufgabe oder eine andere verfügbare Situation gut funktionieren, aber gewöhnen Sie sich BITTE nicht daran, diese Annahme für Code in Produktionsqualität zu treffen.
– E-Riz
15. März 2012 um 22:56 Uhr
Es macht keinen Sinn, den Pfad zur Klassendatei zu finden. Auch die Übungsbeschreibung erwähnt nicht, dass, wenn Sie sie sorgfältig lesen (wo wir das Programm ausführen bedeutet den aktuellen Pfad, aus dem das Programm vom Benutzer aufgerufen wird).
– Der Nagel
15. März 2012 um 23:15 Uhr
Vielleicht können Sie mir helfen, die Anforderung besser zu verstehen? Ich muss überprüfen, ob das Argument mit einem ‘/’ beginnt (Erwähnung in der Beschreibung). Wenn dies der Fall ist, verwenden Sie es einfach als absolut. wie es ist. aber wenn nicht, wie soll ich es behandeln?
– Lablabla
15. März 2012 um 23:18 Uhr