web-dev-qa-db-ja.com

アプリケーションのパスを取得する

最近、Javaでアプリケーションのディレクトリを取得する方法を検索しました。最終的に答えを見つけましたが、そのような一般的な用語を検索するのは簡単ではないので、驚くほど長い時間が必要でした。これを複数の言語で実現する方法のリストをまとめることは良い考えだと思います。

アイデアが気に入ったら(気に入らなければ)自由にアップ/ダウン投票してください。気に入ったら投稿してください.

明確化:

実行可能ファイルを含むディレクトリ現在の作業ディレクトリ(Unixではpwdで指定)。私はもともと前者に興味がありましたが、後者を決定する方法も自由に投稿できます(どちらを意味するかを明確にします)。

79
Konrad Rudolph

Javaの呼び出し

System.getProperty("user.dir")

そして

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

現在の作業ディレクトリを返します。

への呼び出し

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

現在のクラスを含むJARファイルへのパス、またはファイルシステムから直接実行している場合は現在のクラスを生成したCLASSPATH要素(パス)を返します。

例:

  1. アプリケーションは次の場所にあります

     C:\MyJar.jar
    
  2. シェル(cmd.exe)とcdを開いてC:\ test\subdirectoryに移動します。

  3. コマンドJava -jar C:\MyJar.jarを使用してアプリケーションを起動します。

  4. 最初の2つの呼び出しは、「C:\ test\subdirectory」を返します。 3番目の呼び出しは「C:\ MyJar.jar」を返します。

JARファイルではなくファイルシステムから実行する場合、結果は、たとえば、生成されたクラスファイルのルートへのパスになります。

c:\Eclipse\workspaces\YourProject\bin\

パスには、生成されたクラスファイルのパッケージディレクトリは含まれません。

.jarファイル名なしでアプリケーションディレクトリを取得する完全な例、またはファイルシステムから直接実行している場合(デバッグ時など)、クラスファイルへの対応するパス:

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

。NET(C#、VB、…)では、現在のAssemblyインスタンスのLocationを照会できます。ただし、これには実行可能ファイルのファイル名が追加されます。次のコードは、パス(using System.IOおよびusing System.Reflection):

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

または、AppDomainが提供する情報を使用して、参照アセンブリを検索できます。

System.AppDomain.CurrentDomain.BaseDirectory

VBは、My名前空間を介した別のショートカットを許可します。

My.Application.Info.DirectoryPath
22
Konrad Rudolph

Windowsで、WinAPI関数 GetModuleFileName() を使用します。モジュールハンドルにNULLを渡して、現在のモジュールのパスを取得します。

9
MrZebra

Python

path = os.path.dirname(__file__)

現在のモジュールのパスを取得します。

7
Alex McBride

Objective-C Cocoa(Mac OS X、iPhoneの特殊性については知りません):

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

に 。ネット 使用できます

System.IO.Directory.GetCurrentDirectory

アプリケーションの現在の作業ディレクトリを取得するには、VB.NETでは特に使用できます

My.Application.Info.DirectoryPath

exeのディレクトリを取得します。

4
d7samurai

VB6では、 App.Path プロパティを使用してアプリケーションパスを取得できます。

アプリケーションがドライブのルートにある場合、これには末尾の\ EXCEPTがないことに注意してください。

IDEで:

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

Javaには、アプリケーションのパスを見つける2つの方法があります。 1つはSystem.getPropertyを使用することです:

System.getProperty("user.dir");

別の可能性は、Java.io.Fileの使用です:

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

さらに別の可能性はリフレクションを使用します:

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

Libc
* nixタイプ環境(WindowsでもCygwin):

  #include <unistd.h>

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

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

   char *get_current_dir_name(void);

manページを参照

3
Rajish

Delphi

Windowsアプリケーションの場合:

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

コンソールアプリケーションの場合:

言語に関係なく、最初のコマンドラインパラメーターは完全修飾された実行可能ファイル名です。

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

[〜#〜] php [〜#〜]で:

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

現在のスクリプトのパス:

set path [info script]

Tclシェルパス:

set path [info nameofexecutable]

これらのディレクトリが必要な場合は、次を実行します。

set dir [file dirname $path]

現在の(作業中の)ディレクトリを取得します。

set dir [pwd]
2

nix

UNIXでは、環境変数を使用して開始された実行可能ファイルへのパスを見つけることができます。 notは絶対パスである必要があるため、現在の作業ディレクトリ(シェル内のpwd)および/またはPATH変数を0番目の値と組み合わせる必要があります。環境の要素。

ただし、Unixでは値は制限されています。実行可能ファイルは、たとえばシンボリックリンクを介して呼び出すことができ、環境変数には初期リンクのみが使用されます。一般に、Unix上のアプリケーションは、興味深いこと(リソースのロードなど)にこれを使用する場合、あまり堅牢ではありません。 UNIXでは、物事にハードコードされた場所を使用するのが一般的です。たとえば、/etcリソースの場所が指定されています。

2
Paul de Vrieze

inAndroidその

getApplicationInfo().dataDir;

sDカードを取得するには、私は使用します

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

後者は特定の種類のファイル(オーディオ/映画など)を保存するために使用されます。 Environmentクラスにはこれらの文字列の定数があります。

基本的に、アプリを使用する場合はApplicationInfoクラスを使用し、環境クラスを使用するSDカード/外部ディレクトリのデータを使用する場合は何でも使用します。

ドキュメント: ApplicationInfo環境

2
rishi

bashでは、「pwd」コマンドは現在の作業ディレクトリを返します。

2
Cedric Meury

に Ruby、次のスニペットは現在のソースファイルのパスを返します。

path = File.dirname(__FILE__)
1
bltxd

私は https://github.com/gpakosz/whereami をリリースしました。これはCの問題を解決し、以下を提供します。

  • 現在の実行可能ファイルへのパス
  • 現在のモジュールへのパス(共有ライブラリから呼び出す場合、実行可能ファイルへのパスとは異なります)。

WindowsではGetModuleFileNameWを使用し、Linuxでは/proc/self/mapsを解析し、MacおよびiOSではAndroidを解析し、_NSGetExecutablePathまたはdladdrを使用します。

1
Gregory Pakosz

Cmd(Microsoftコマンドラインシェル)

%*でスクリプトの名前を取得できます(pwdに関連する場合があります)

スクリプトのディレクトリを取得します:

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

バグを見つけたら、それを見つけます。その後、修正またはコメントしてください。

1
ctrl-alt-delor

Java:

すべてのシステム(Windows、Linux、Mac OS X)でこれが機能するのはこれだけです。

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

[〜#〜] cfml [〜#〜]には、スクリプトのパスにアクセスするための2つの関数があります。

_getBaseTemplatePath()
getCurrentTemplatePath()
_

GetBaseTemplatePathを呼び出すと、「ベース」スクリプトのパス、つまりWebサーバーによって要求されたものが返されます。
getCurrentTemplatePathを呼び出すと、現在のスクリプトのパス、つまり現在実行中のスクリプトのパスが返されます。

両方のパスは絶対パスであり、スクリプトの完全なディレクトリとファイル名が含まれています。

ディレクトリーのみを判別するには、結果に対して関数getDirectoryFromPath( ... )を使用します。

したがって、アプリケーションのディレクトリの場所を特定するには、次のようにします。

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

_Application.cfc_のonApplicationStartイベント内



CFMLエンジンを実行しているアプリサーバーのあるパスを特定するには、cfexecuteを使用してシェルコマンドにアクセスできます。

Unix:

_<cfexecute name="pwd"/>
_

windowsの場合、テキスト_pwd.bat_を含む_@cd_を作成し、次に:

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

(画面に出力するのではなく、variablecfexecute属性を使用して値を保存します。)

1
Peter Boughton

「Mac OSXのみに関する上記20:OSX JAR BUNDLERを介してJAR実行可能ファイルが「アプリ」に変換される場合、getClass()。getProtectionDomain()。getCodeSource()。getLocation();は返されません。アプリの現在のディレクトリですが、アプリの内部ディレクトリ構造を応答に追加しますアプリのこの内部構造は/ theCurrentFolderWhereTheAppReside/Contents/Resources/Java/yourfileです

おそらくこれはJavaの小さなバグです。とにかく、1つまたは2つの方法を使用して正しい答えを取得する必要があります。別のフォルダーまたはデスクトップにあるショートカットを使用します。

カール

SoundPimp.com

0
carl