Wie erhalte ich den aktuellen Klassennamen einschließlich des Paketnamens in Java?

Lesezeit: 3 Minuten

Benutzer-Avatar
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?

    – Lablabla

    15. März 2012 um 22:41 Uhr

  • stackoverflow.com/questions/936684/…

    – Der Nagel

    15. März 2012 um 22:44 Uhr

Benutzer-Avatar
Jon Eulenland

Es gibt eine Klasse, Classdas kann das:

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:

Paket: meinpaket
Klasse: MeineKlasse
Vollständiger Bezeichner: mypackage.MyClass

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");

Benutzer-Avatar
Md. Zahangir Alam

verwenden this.getClass().getName() bekommen packageName.className und verwenden this.getClass().getSimpleName() um nur den Klassennamen zu erhalten

1268530cookie-checkWie erhalte ich den aktuellen Klassennamen einschließlich des Paketnamens in Java?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy