Ist es möglich, den Pfad zu meiner .class-Datei, die meine Hauptfunktion enthält, von main zu erhalten?Abrufen des Verzeichnispfads zur .class-Datei, die main enthält
Antwort
URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());
Beachten Sie, dass die meisten Klassendateien in JAR-Dateien zusammengefügt werden, so dies nicht in jedem Fall funktionieren wird (daher die IllegalStateException
). Sie können jedoch die JAR suchen, die die Klasse mit dieser Technik enthält, und Sie können den Inhalt der Klassendatei abrufen, indem getResourceAsStream()
statt getResource()
durch einen Aufruf ersetzt wird, und das funktioniert, ob die Klasse im Dateisystem oder in ist ein JAR.
Nach http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.html, nein. Ich schlage jedoch vor, $0 (Program Name) in Java? Discover main class? zu lesen, was Ihnen zumindest die Hauptklasse gibt.
Innerhalb der 'main' Methode ist die umschließende Klasse bereits bekannt. – erickson
Wozu brauchst du es? Wenn Sie es brauchen, um alle Dateien zu erhalten, die sich in demselben Verzeichnis befinden, ist das Class.getResourceAsStream() für.
Ich versuche, meine Hauptklassendatei zu sperren, um den Start meiner Anwendung mehr als einmal zu stoppen. –
Das sieht eher wie ein Endbenutzerproblem für mich aus. Berücksichtigen Sie auch die mögliche Notwendigkeit, mehrere Instanzen einer bestimmten Anwendung auszuführen, und die Benutzer daran zu hindern, wird zu einem großen Ärgernis werden.
Wenn das Problem mit temporären Dateikonflikten auftritt, stellen Sie sicher, dass alle temporären Dateien eindeutige Namen haben. Dies ist, so wie ich es verstehe, der häufigste Grund, warum Benutzer die Ausführung mehrerer Anwendungen verhindern müssen.
S.S .: Die Methoden java.io.File.createTempFile() sind ideal geeignet, um temporäre Dateikonflikte zu vermeiden, da sie automatisch eindeutige Dateinamen generieren.
- 1. Abrufen des Verzeichnispfads, der sich in einer Assembly befindet
- 2. Abrufen des Schablonentyps zur Laufzeit
- 3. Angeben des Verzeichnispfads für statische Bilder in Django
- 4. die Annotationsinformationen zur Laufzeit abrufen
- 5. Welche JS-Datei zur Verwendung der Funktion des Dialogfelds enthält
- 6. In einer OO-Sprache, wie nennen Sie Ihre Klasse, die die Main-Methode enthält?
- 7. Gibt es in Android eine Funktion analog zu "int main" in C/C++, die die Hauptschleife des Programms enthält?
- 8. JQuery Änderungstext des Absatzes, die Bild enthält
- 9. Die Zellenposition des zuletzt aktivierten Hyperlinks in Excel abrufen
- 10. Das Hinzufügen des Klassenpfades (sqljdbc4) zur Manifestdatei macht JAR nicht in der Lage, die Main-Klasse zu finden/zu laden. Main
- 11. Kann ich mehr als eine Klasse haben, die die Methode main() in einem Java-Projekt enthält?
- 12. Geeting Exception in thread "main" java.util.NoSuchElementException beim Abrufen des Elements aus HashMap
- 13. Kann die Datei, die eine Klasse enthält, zur Laufzeit abgerufen werden?
- 14. Abrufen des JSON-Schlüssels und des Werts
- 15. Abrufen des Eigenschaftsnamens des Objekts
- 16. Abrufen einer Liste, die NULLS mit Linq enthält
- 17. Abrufen des Klassennamens für die Protokollierung
- 18. Zurück zu int main() anstatt zur vorherigen Funktion?
- 19. Ist die main() -Funktion einspringend?
- 20. ArrayList Abrufen des Werts des Objekts
- 21. Talend - Main erscheint nicht im Link zur Karte
- 22. Abrufen des Assemblynamens
- 23. Thread-ID des Hauptthreads abrufen
- 24. Programmgesteuertes Abrufen des Webanforderungsinitiators
- 25. Ablaufzeit des Cache abrufen
- 26. Abrufen des Windows-Benutzerspracheneinstellungswerts
- 27. Abrufen des SCON-Stammverzeichnisses
- 28. Fehler CS5001: exe enthält keine statische `Main'-Methode, die für einen Einstiegspunkt geeignet ist
- 29. Wert des Registrierungsschlüssels abrufen
- 30. Titel des YouTube-Videos abrufen
Wollen Sie wissen, wo sich die .class-Datei im Dateisystem befindet? – laz