Ich habe kürzlich gesucht, wie ich das Anwendungsverzeichnis in Java erhalten kann. Ich habe endlich die Antwort gefunden, aber ich habe überraschend lange gebraucht, weil die Suche nach einem solchen Oberbegriff nicht einfach ist. Ich denke, es wäre eine gute Idee, eine Liste zu erstellen, wie dies in mehreren Sprachen erreicht werden kann.
Fühlen Sie sich frei, nach oben / unten zu stimmen, wenn Sie die Idee (nicht) mögen, und tragen Sie bitte bei, wenn Sie sie mögen.
Klärung:
Es gibt eine feine Unterscheidung zwischen dem Verzeichnis, das die ausführbare Datei enthält, und dem aktuellen Arbeitsverzeichnis (angegeben pwd
unter Unix). Ich war ursprünglich an Ersterem interessiert, kann aber auch Methoden zur Bestimmung des Letzteren veröffentlichen (um zu klären, welche Sie meinen).
quelle
Antworten:
In Java die Aufrufe
und
Geben Sie das aktuelle Arbeitsverzeichnis zurück.
Der Anruf an
Gibt den Pfad zur JAR-Datei zurück, die die aktuelle Klasse enthält, oder zum CLASSPATH-Element (Pfad), das die aktuelle Klasse ergab, wenn Sie direkt vom Dateisystem ausgeführt werden.
Beispiel:
Ihre Bewerbung befindet sich unter
Öffnen Sie die Shell (cmd.exe) und wechseln Sie
cd
in das Unterverzeichnis C: \ test \.Starten Sie die Anwendung mit dem Befehl
java -jar C:\MyJar.jar
.Die ersten beiden Aufrufe geben 'C: \ test \ subdirectory' zurück. Der dritte Aufruf gibt 'C: \ MyJar.jar' zurück.
Wenn Sie von einem Dateisystem anstatt von einer JAR-Datei ausführen, ist das Ergebnis beispielsweise der Pfad zum Stammverzeichnis der generierten Klassendateien
Der Pfad enthält nicht die Paketverzeichnisse für die generierten Klassendateien.
Ein vollständiges Beispiel zum Abrufen des Anwendungsverzeichnisses ohne den Dateinamen .jar oder den entsprechenden Pfad zu den Klassendateien, wenn diese direkt vom Dateisystem ausgeführt werden (z. B. beim Debuggen):
quelle
Class.getResource()
ist.In .NET (C #, VB,…) können Sie die aktuelle
Assembly
Instanz nach ihrer abfragenLocation
. Hieran wird jedoch der Dateiname der ausführbaren Datei angehängt. Der folgende Code bereinigt den Pfad (using System.IO
undusing System.Reflection
):Alternativ können Sie die von bereitgestellten Informationen verwenden, um
AppDomain
nach Baugruppen zu suchen, auf die verwiesen wird:VB erlaubt eine weitere Verknüpfung über den
My
Namespace:quelle
In Windows - verwenden Sie die WinAPI Funktion GetModuleFileName () . Übergeben Sie NULL für das Modulhandle, um den Pfad für das aktuelle Modul abzurufen.
quelle
Python
Damit wird der Pfad des aktuellen Moduls ermittelt.
quelle
Objective-C Cocoa (Mac OS X, ich kenne keine iPhone-Besonderheiten):
quelle
In Java gibt es zwei Möglichkeiten, den Pfad der Anwendung zu ermitteln. Eine ist zu beschäftigen
System.getProperty
:Eine andere Möglichkeit ist die Verwendung von
java.io.File
:Eine weitere Möglichkeit besteht in der Reflexion:
quelle
C:\Program Files\ExampleApp
wird in URL-Form dargestellt alsfile:/C:/Program%20Files/ExampleApp
, für die getPath () zurückgibt"/C:/Program%20Files/ExampleApp"
, was offensichtlich nicht existiert. Der einzig richtige Weg, eine URL in eine Datei zu konvertieren, istnew File(url.toURI())
.In VB6 können Sie den Anwendungspfad über das abrufen
App.Path
Eigenschaft .Beachten Sie, dass dies kein
\
abschließendes EXCEPT hat, wenn sich die Anwendung im Stammverzeichnis des Laufwerks befindet.In der IDE:
quelle
In .Net können Sie verwenden
System.IO.Directory.GetCurrentDirectory
um das aktuelle Arbeitsverzeichnis der Anwendung abzurufen, und speziell in VB.NET können Sie verwenden
My.Application.Info.DirectoryPath
um das Verzeichnis der exe zu erhalten.
quelle
Delphi
In Windows-Anwendungen:
In Konsolenanwendungen:
Unabhängig von der Sprache ist der erste Befehlszeilenparameter der vollständig qualifizierte Name der ausführbaren Datei:
quelle
Libc
In * nix-Umgebung (auch Cygwin in Windows):
Siehe Manpage
quelle
Unix
Unter Unix kann man den Pfad zu der ausführbaren Datei finden, die mit den Umgebungsvariablen gestartet wurde. Es ist nicht unbedingt ein absoluter Pfad, daher müssten Sie das aktuelle Arbeitsverzeichnis (in der Shell
pwd
:) und / oder die PATH-Variable mit dem Wert des 0-ten Elements der Umgebung kombinieren.Der Wert ist unter Unix jedoch begrenzt, da die ausführbare Datei beispielsweise über eine symbolische Verknüpfung aufgerufen werden kann und nur die ursprüngliche Verknüpfung für die Umgebungsvariable verwendet wird. Im Allgemeinen sind Anwendungen unter Unix nicht sehr robust, wenn sie dies für interessante Zwecke verwenden (z. B. zum Laden von Ressourcen). Unter Unix werden häufig fest codierte Speicherorte für Dinge verwendet, z. B. eine Konfigurationsdatei, in der
/etc
die Ressourcenspeicherorte angegeben sind.quelle
In bash gibt der Befehl 'pwd' das aktuelle Arbeitsverzeichnis zurück.
quelle
pwd
das aktuelle Arbeitsverzeichnis zurück, das vom Pfad des Skripts abweichen kann.In PHP :
quelle
in Android sein
Um eine SD-Karte zu bekommen, benutze ich
wobei letzteres zum Speichern eines bestimmten Dateityps (Audio / Filme usw.) verwendet wird. Sie haben Konstanten für diese Zeichenfolgen in der Umgebungsklasse.
Grundsätzlich verwenden Sie für alles, was mit der App zu tun hat, die ApplicationInfo-Klasse und für alles, was mit Daten auf der SD-Karte / im externen Verzeichnis unter Verwendung der Environment-Klasse zu tun hat.
Dokumente: ApplicationInfo , Umgebung
quelle
In Tcl
Pfad des aktuellen Skripts:
Tcl-Shell-Pfad:
Wenn Sie eines dieser Verzeichnisse benötigen, gehen Sie wie folgt vor:
Aktuelles (Arbeits-) Verzeichnis abrufen:
quelle
Java:
Auf allen Systemen (Windows, Linux, Mac OS X) funktioniert für mich nur Folgendes:
quelle
In Ruby gibt das folgende Snippet den Pfad der aktuellen Quelldatei zurück:
quelle
In CFML gibt es zwei Funktionen für den Zugriff auf den Pfad eines Skripts:
Durch Aufrufen von getBaseTemplatePath wird der Pfad des 'Base'-Skripts zurückgegeben, dh der vom Webserver angeforderte.
Durch Aufrufen von getCurrentTemplatePath wird der Pfad des aktuellen Skripts zurückgegeben, dh der Pfad, der gerade ausgeführt wird.
Beide Pfade sind absolut und enthalten das vollständige Verzeichnis + den Dateinamen des Skripts.
Verwenden Sie die Funktion
getDirectoryFromPath( ... )
für die Ergebnisse, um nur das Verzeichnis zu ermitteln .Um den Verzeichnisspeicherort einer Anwendung zu bestimmen, haben Sie folgende Möglichkeiten:
Innerhalb der
onApplicationStart
Veranstaltung für IhreApplication.cfc
Um den Pfad zu bestimmen, auf dem sich der App-Server befindet, auf dem Ihre CFML-Engine ausgeführt wird, können Sie mit cfexecute auf Shell-Befehle zugreifen. So können Sie (unter Berücksichtigung der obigen Erläuterungen zu pwd / etc) Folgendes tun:
Unix:
Erstellen Sie für Windows einen
pwd.bat
enthaltenden Text@cd
und dann:(Verwenden Sie das
variable
Attribut voncfexecute
, um den Wert zu speichern, anstatt ihn auf dem Bildschirm auszugeben.)quelle
In cmd (die Microsoft-Befehlszeilen-Shell)
Sie können den Namen des Skripts mit% * abrufen (möglicherweise relativ zu pwd).
Dies erhält Verzeichnis des Skripts:
Wenn Sie Fehler finden, werden Sie. Dann bitte korrigieren oder kommentieren.
quelle
Ich habe https://github.com/gpakosz/whereami veröffentlicht , das das Problem in C löst und Ihnen Folgendes bietet:
Es verwendet
GetModuleFileNameW
unter Windows, analysiert/proc/self/maps
unter Linux und Android und verwendet_NSGetExecutablePath
oderdladdr
auf Mac und iOS.quelle
Hinweis zur Beantwortung von "20 oben nur für Mac OSX: Wenn eine ausführbare JAR-Datei über den OSX-JAR-BUNDLER in eine" App "umgewandelt wird, gibt getClass (). GetProtectionDomain (). GetCodeSource (). GetLocation (); aktuelles Verzeichnis der App, fügt jedoch die interne Verzeichnisstruktur der App zur Antwort hinzu. Diese interne Struktur einer App lautet / theCurrentFolderWhereTheAppReside / Contents / Resources / Java / yourfile
Vielleicht ist dies ein kleiner Fehler in Java. Auf jeden Fall muss man Methode eins oder zwei verwenden, um die richtige Antwort zu erhalten, und beide liefern die richtige Antwort, selbst wenn die App gestartet wird, z. B. über eine Verknüpfung in einem anderen Ordner oder auf dem Desktop.
Carl
SoundPimp.com
quelle