2009-04-22 4 views

Antwort

28
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.

0

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.

+1

Ich versuche, meine Hauptklassendatei zu sperren, um den Start meiner Anwendung mehr als einmal zu stoppen. –

0

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.

Verwandte Themen