it-swarm.com.de

Rufen Sie den Pfad der Anwendung ab

Ich habe vor kurzem gesucht, wie ich das Verzeichnis der Anwendung in Java erhalten könnte. 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 man dies in mehreren Sprachen erreichen kann.

Fühlen Sie sich frei, wenn Sie die Idee (nicht) mögen und bitte beitragen wenn Sie es mögen.

Klärung:

Es gibt eine feine Unterscheidung zwischen dem Verzeichnis , das die ausführbare Datei enthält, und dem aktuellen Arbeitsverzeichnis (gegeben von pwd unter Unix). Ursprünglich war ich an Ersterem interessiert, aber ich kann gerne Methoden zur Bestimmung des Letzteren posten (klären, welche Sie meinen).

79
Konrad Rudolph

In Java die Aufrufe

System.getProperty("user.dir")

und

new Java.io.File(".").getAbsolutePath();

das aktuelle Arbeitsverzeichnis zurückgeben. 

Der Anruf an 

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

gibt den Pfad zur JAR-Datei zurück, die die aktuelle Klasse enthält, oder das CLASSPATH-Element (Pfad), aus dem die aktuelle Klasse stammt, wenn Sie direkt vom Dateisystem aus ausgeführt werden. 

Beispiel: 

  1. Ihre Bewerbung befindet sich unter 

     C:\MyJar.jar
    
  2. Öffnen Sie die Shell (cmd.exe) und cd in das Unterverzeichnis C:\test \.

  3. Starten Sie die Anwendung mit dem Befehl Java -jar C:\MyJar.jar.

  4. Die ersten beiden Aufrufe geben 'C:\test\subdirectory' zurück. Der dritte Aufruf gibt 'C:\MyJar.jar' zurück.

Bei der Ausführung von einem Dateisystem statt von einer JAR-Datei ist das Ergebnis beispielsweise der Pfad zum Stamm der generierten Klassendateien

c:\Eclipse\workspaces\YourProject\bin\

Der Pfad enthält nicht die Paketverzeichnisse für die generierten Klassendateien. 

Ein vollständiges Beispiel, um das Anwendungsverzeichnis ohne den Namen der JAR-Datei zu erhalten, oder den entsprechenden Pfad zu den Klassendateien, wenn dieser direkt vom Dateisystem ausgeführt wird (z. B. beim Debuggen)

String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); 

if (applicationDir.endsWith(".jar"))
{
    applicationDir = new File(applicationDir).getParent();
}
// else we already have the correct answer
58
Thomas Feilkas

In .NET (C #, VB, ...) können Sie die aktuelle Assembly-Instanz nach ihrer Location abfragen. Dies hat jedoch den Dateinamen der ausführbaren Datei angehängt. Der folgende Code bereinigt den Pfad (using System.IO und using System.Reflection):

Directory.GetParent(Assembly.GetExecutingAssembly().Location)

Alternativ können Sie die Informationen von AppDomain verwenden, um nach referenzierten Assemblys zu suchen:

System.AppDomain.CurrentDomain.BaseDirectory

VB erlaubt eine weitere Verknüpfung über den Namespace My:

My.Application.Info.DirectoryPath
22
Konrad Rudolph

Verwenden Sie in Windows die WinAPI-Funktion GetModuleFileName () . Übergeben Sie NULL für das Modul-Handle, um den Pfad für das aktuelle Modul abzurufen.

9
MrZebra

Python

path = os.path.dirname(__file__)

Dadurch wird der Pfad des aktuellen Moduls ermittelt.

7
Alex McBride

Objective-C Cocoa (Mac OS X, ich weiß es nicht für iPhone)

NSString * applicationPath = [[NSBundle mainBundle] bundlePath];
5
mouviciel

Im .Netz Sie können verwenden

System.IO.Directory.GetCurrentDirectory

um das aktuelle Arbeitsverzeichnis der Anwendung abzurufen, können Sie in VB.NET speziell verwenden

My.Application.Info.DirectoryPath

um das Verzeichnis der Exe zu erhalten.

4
d7samurai

In VB6 können Sie den Anwendungspfad mithilfe der Eigenschaft App.Path abrufen.

Beachten Sie, dass dies keinen abschließenden \ EXCEPT hat, wenn sich die Anwendung im Stammverzeichnis des Laufwerks befindet.

In der IDE:

?App.Path
C:\Program Files\Microsoft Visual Studio\VB98
4
Deanna

In Java gibt es zwei Möglichkeiten, den Pfad der Anwendung zu finden. Einer ist, System.getProperty zu verwenden:

System.getProperty("user.dir");

Eine andere Möglichkeit ist die Verwendung von Java.io.File:

new Java.io.File("").getAbsolutePath();

Eine weitere Möglichkeit verwendet Reflexion:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
4
Konrad Rudolph

Libc
In einer * nix-Umgebung (auch Cygwin unter Windows):

  #include <unistd.h>

   char *getcwd(char *buf, size_t size);

   char *getwd(char *buf); //deprecated

   char *get_current_dir_name(void);

Siehe Manpage

3
Rajish

Delphi

In Windows-Anwendungen:

Unit Forms;
path := ExtractFilePath(Application.ExeName);

In Konsolenanwendungen:

Unabhängig von der Sprache ist der erste Befehlszeilenparameter der vollständig qualifizierte Name der ausführbaren Datei:

Unit System;
path := ExtractFilePath(ParamStr(0));
3

InPHP:

<?php
  echo __DIR__; //same as dirname(__FILE__). will return the directory of the running script
  echo $_SERVER["DOCUMENT_ROOT"]; // will return the document root directory under which the current script is executing, as defined in the server's configuration file.
  echo getcwd(); //will return the current working directory (it may differ from the current script location).
?>
2
lepe

In Tcl

Pfad des aktuellen Skripts:

set path [info script]

Tcl Shell-Pfad:

set path [info nameofexecutable]

Wenn Sie eines dieser Verzeichnisse benötigen, führen Sie folgende Schritte aus:

set dir [file dirname $path]

Aktuelles (Arbeits-) Verzeichnis abrufen:

set dir [pwd]
2

Unix

In 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'-Elements der Umgebung kombinieren.

Der Wert ist jedoch in Unix 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 Dinge (wie etwa das Laden von Ressourcen) verwenden. Unter Unix werden häufig hartcodierte Speicherorte für Dinge verwendet, z. B. eine Konfigurationsdatei in /etc, in der die Ressourcenspeicherorte angegeben sind.

2
Paul de Vrieze

in Android sein

getApplicationInfo().dataDir;

um eine SD-Karte zu erhalten, benutze ich

Environment.getExternalStorageDirectory();
Environment.getExternalStoragePublicDirectory(String type);

wo letzteres zum Speichern eines bestimmten Dateityps verwendet wird (Audio/Filme usw.). Sie haben Konstanten für diese Zeichenfolgen in der Umgebungsklasse. 

Grundsätzlich gilt für alle Anwendungsbereiche der ApplicationInfo-Klasse und für Daten in SD-Karte/Externes Verzeichnis, die die Umgebungsklasse verwenden. 

Dokumente: ApplicationInfo , Umgebung

2
rishi

In bash gibt der Befehl 'pwd' das aktuelle Arbeitsverzeichnis zurück.

2
Cedric Meury

im RubinDas folgende Snippet gibt den Pfad der aktuellen Quelldatei zurück:

path = File.dirname(__FILE__)
1
bltxd

Ich habe https://github.com/gpakosz/whereami veröffentlicht, das das Problem in C löst und Ihnen Folgendes gibt:

  • der Pfad zur aktuellen ausführbaren Datei
  • der Pfad zum aktuellen Modul (unterscheidet sich von Pfad zu ausführbarer Datei beim Aufruf aus einer gemeinsam genutzten Bibliothek).

Es verwendet GetModuleFileNameW unter Windows, analysiert /proc/self/maps unter Linux und Android und verwendet _NSGetExecutablePath oder dladdr unter Mac und iOS.

1
Gregory Pakosz

In cmd (die Microsoft-Befehlszeilen-Shell)

Sie können den Namen des Skripts mit% * abrufen (kann relativ zu pwd sein)

Dies erhält ein Verzeichnis des Skripts:

set oldpwd=%cd%
cd %0\..
set app_dir=%pwd%
cd %oldpwd%

Wenn Sie Fehler finden, werden Sie dies tun. Dann bitte korrigieren oder kommentieren.

1
ctrl-alt-delor

Java:

Auf allen Systemen (Windows, Linux, Mac OS X) funktioniert für mich nur Folgendes:

public static File getApplicationDir() 
{
    URL url = ClassLoader.getSystemClassLoader().getResource(".");
    File applicationDir = null;
    try {
        applicationDir = new File(url.toURI());
    } catch(URISyntaxException e) {
        applicationDir = new File(url.getPath());
    }

    return applicationDir;
}
1
Quark

InCFMLgibt es zwei Funktionen, um auf den Pfad eines Skripts zuzugreifen:

getBaseTemplatePath()
getCurrentTemplatePath()

Beim Aufruf von getBaseTemplatePath wird der Pfad des "Basis" -Skripts zurückgegeben, d. H. Der vom Webserver angeforderte.
Beim Aufruf von getCurrentTemplatePath wird der Pfad des aktuellen Skripts zurückgegeben, d. H. Des aktuell ausgeführten Skripts.

Beide Pfade sind absolut und enthalten das vollständige Verzeichnis + den Dateinamen des Skripts.

Um nur das Verzeichnis zu ermitteln, verwenden Sie die Funktion getDirectoryFromPath( ... ) für die Ergebnisse.

So können Sie den Verzeichnispfad einer Anwendung ermitteln:

<cfset Application.Paths.Root = getDirectoryFromPath( getCurrentTemplatePath() ) />

Innerhalb des onApplicationStart-Ereignisses für Ihren Application.cfc



Um den Pfad zu ermitteln, auf dem sich der App-Server befindet, auf dem Ihre CFML-Engine ausgeführt wird, können Sie mit cfexecute auf Shell-Befehle zugreifen.

Unix:

<cfexecute name="pwd"/>

erstellen Sie unter Windows einen pwd.bat, der Text @cd enthält.

<cfexecute name="C:\docume~1\myuser\pwd.bat"/>

(Verwenden Sie das variable-Attribut von cfexecute, um den Wert zu speichern, anstatt ihn auf dem Bildschirm auszugeben.)

1
Peter Boughton

Anmerkung "20" nur für Mac OSX: Wenn eine JAR-Programmdatei über den OSX JAR BUNDLER in eine "App" umgewandelt wird, gibt getClass (). GetProtectionDomain (). GetCodeSource () Das aktuelle Verzeichnis der App, fügt jedoch der Antwort die interne Verzeichnisstruktur der App hinzu. Diese interne Struktur einer App lautet/theCurrentFolderWhereTheAppReside/Contents/Resources/Java/yourfile

Vielleicht ist dies ein kleiner Fehler in Java. Jedenfalls muss man die Methode eins oder zwei verwenden, um die richtige Antwort zu erhalten, und beide liefern die richtige Antwort, auch wenn die App gestartet wird, z. über eine Verknüpfung in einem anderen Ordner oder auf dem Desktop.

carl

SoundPimp.com

0
carl