80

最近、Java でアプリケーションのディレクトリを取得する方法を検索しました。ようやく答えが見つかりましたが、そのような一般的な用語を検索するのは簡単ではないため、驚くほど時間がかかりました。複数の言語でこれを実現する方法のリストを作成することをお勧めします。

アイデアが気に入らない(気に入らない)場合は、自由に賛成/反対投票してください。気に入った場合は貢献してください。

説明:

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

4

21 に答える 21

59

Java では、呼び出し

System.getProperty("user.dir")

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

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

への呼びかけ

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

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

例:

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

     C:\MyJar.jar
    
  2. シェル (cmd.exe) を開き、cdC:\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
于 2009-03-24T07:17:06.977 に答える
22

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

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

または、 によって提供される情報を使用して、参照されAppDomainているアセンブリを検索することもできます。

System.AppDomain.CurrentDomain.BaseDirectory

MyVB では、名前空間を介して別のショートカットを使用できます。

My.Application.Info.DirectoryPath
于 2008-10-20T11:07:58.880 に答える
9

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

于 2008-10-20T12:24:31.627 に答える
7

パイソン

path = os.path.dirname(__file__)

これにより、現在のモジュールのパスが取得されます。

于 2008-10-20T11:27:46.000 に答える
4

.Netでは使用できます

System.IO.Directory.GetCurrentDirectory

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

My.Application.Info.DirectoryPath

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

于 2010-10-28T17:38:56.390 に答える
4

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

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

IDE で:

?App.Path
C:\Program Files\Microsoft Visual Studio\VB98
于 2012-07-31T10:34:42.500 に答える
4

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

System.getProperty("user.dir");

別の可能性は、次の使用ですjava.io.File

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

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

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
于 2008-10-20T11:07:42.420 に答える
3

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);

マニュアルページを参照してください

于 2008-10-20T12:25:06.820 に答える
3

デルファイ

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

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

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

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

Unit System;
path := ExtractFilePath(ParamStr(0));
于 2008-10-20T11:23:19.643 に答える
2

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).
?>
于 2011-12-14T04:30:56.767 に答える
2

ジャワ:

すべてのシステム(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;
}
于 2016-09-06T11:41:06.103 に答える
2

Androidでは_

getApplicationInfo().dataDir;

SDカードを入手するために、私は使用します

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

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

基本的に、アプリに関することはApplicationInfoクラスを使用し、SDカード/外部ディレクトリ内のデータに関することはEnvironmentクラスを使用します。

ドキュメント : ApplicationInfo環境

于 2012-02-20T20:08:19.823 に答える
2

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

于 2008-10-20T11:15:53.077 に答える
2

Tcl

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

set path [info script]

Tcl シェル パス:

set path [info nameofexecutable]

これらのディレクトリが必要な場合は、次のようにします。

set dir [file dirname $path]

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

set dir [pwd]
于 2010-08-11T16:09:42.397 に答える
2

Unix

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

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

于 2008-10-20T12:15:57.837 に答える
1

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

getBaseTemplatePath()
getCurrentTemplatePath()

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

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

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

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

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

onApplicationStartあなたのためのイベントの中でApplication.cfc



CFML エンジンを実行しているアプリケーション サーバーのパスを特定するには、cfexecute を使用してシェル コマンドにアクセスできます。したがって、(上記の pwd/etc に関する説明を念頭に置いて) 次のことができます。

ユニックス:

<cfexecute name="pwd"/>

Windows の場合、pwd.bat含むテキストを作成して@cdから:

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

(画面に出力する代わりに、variable属性を使用しcfexecuteて値を保存します。)

于 2008-12-14T22:33:48.550 に答える
1

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

%* でスクリプトの名前を取得できます (pwd に関連している可能性があります)。

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

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

バグが見つかった場合は、それを行います。その後、修正またはコメントしてください。

于 2012-07-03T09:40:34.000 に答える
1

Cの問題を解決し、あなたに与えるhttps://github.com/gpakosz/whereamiをリリースしました:

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

Windows で使用し、Linux と AndroidGetModuleFileNameWで解析し、Mac と iOS でorを使用します。/proc/self/maps_NSGetExecutablePathdladdr

于 2015-01-28T16:54:52.807 に答える
1

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

path = File.dirname(__FILE__)
于 2008-10-20T11:37:40.287 に答える
0

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

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

カール

SoundPimp.com

于 2012-01-31T12:25:20.247 に答える